#c
#c
Вопрос:
Я новичок в программировании на C и написании кода для определения простой факторизации для M тестовых случаев. Сама функция работает, если я сканирую только один раз за раз, но с треском проваливается, когда я пытался сделать это M раз.
Я не знаю, почему цикл глючит с помощью scanf().
int main(void) {
int n, j = 0, m, print = 0;
int i = 2, counter = 0;
scanf("%d", amp; m);
while (j < m) {
scanf("%d", amp; n); //This scan is buggy and only works for the first time
while (n != 1) {
if (n % i == 0) {
while (n % i == 0) {
n = n / i;
counter ;
}
printf("%i ^ %i, ", i, counter);
}
counter = 0;
i ;
}
printf("n");
j ;
}
return 0;
}
Комментарии:
1. Вы никогда не должны использовать
scanf
без проверки возвращаемого значения.2. Попробуйте форматировать строку
" %d"
3. Кроме того, было бы очень полезно, если бы вы сказали нам, каким образом, по вашему мнению, он с треском проваливается.
4.
amp;
никогда не отделяется от переменной символом aspace
. Вы не можете правильно использовать какую-либо функцию пользовательского ввода, не проверив возврат .
Ответ №1:
Дело не столько в том, что ваша scanf
строка «глючит», а в том, что вы не сбрасываете значение i
в начале каждого внешнего while
цикла. Таким образом, при первом запуске через этот цикл i
начинается со значения 2
, но при последующих запусках он будет начинаться со значения, оставшегося после окончания предыдущего запуска.
Чтобы исправить это, просто добавьте строку i = 2;
до (или сразу после) вашей scanf("%d", amp;n);
строки.