аргументы оператора scanf - PullRequest
       3

аргументы оператора scanf

0 голосов
/ 27 апреля 2011

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

  scanf("%d \n", &n);
  for(i=0;i<n;i++)
  printf("%d \n",i);

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

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

1 Ответ

2 голосов
/ 27 апреля 2011

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

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

2
7

Вы получите вывод:

0
1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...