аргументы инструкции scanf

#c

#c

Вопрос:

Я написал этот код:

   scanf("%d n", amp;n);
  for(i=0;i<n;i  )
  printf("%d n",i);
  

Это не было напечатано. Я понял, что в вызове scanf был ‘ n’. Когда я удалил это, я получил ожидаемый результат. Почему он не выдавал выходные данные, когда строка формата scanf содержала ‘ n’?

В чем причина?

Ответ №1:

scanf имеет неявное чтение до конца строки. Поскольку у вас в строке формата был ‘ n’, он считывал ваш первый возврат как часть формата. Затем он продолжал ожидать ‘ n’, который он ожидал в качестве завершителя. Если бы вы указали другой токен, за которым следует возврат, тогда вы получили бы ожидаемые результаты.

Итак, если вы указали:

 2
7
  

Вы бы получили вывод:

 0
1
  

Потому что первое число (2) было сопоставлено с вашим первым спецификатором формата. В чем я не уверен, так это в том, почему вам нужно предоставить другой токен (простое нажатие return в последующей строке не работает). Я предполагаю, что это потому, что scanf требует минимум одного символа, отличного от пробела, но я могу ошибаться.