#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 требует минимум одного символа, отличного от пробела, но я могу ошибаться.