ошибка scanf в цикле while (и для цикла), сканирование навсегда

#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; никогда не отделяется от переменной символом a space . Вы не можете правильно использовать какую-либо функцию пользовательского ввода, не проверив возврат .

Ответ №1:

Дело не столько в том, что ваша scanf строка «глючит», а в том, что вы не сбрасываете значение i в начале каждого внешнего while цикла. Таким образом, при первом запуске через этот цикл i начинается со значения 2 , но при последующих запусках он будет начинаться со значения, оставшегося после окончания предыдущего запуска.

Чтобы исправить это, просто добавьте строку i = 2; до (или сразу после) вашей scanf("%d", amp;n); строки.