Путаница, перепроверка функции ungetc
Я не понимаю, как работает эта программа?
char c;
int i;
for(i=1;i<=5;i++)
{
scanf("%c",&c);
printf("%c",c);
ungetc(c,stdin);
}
Вывод программы является символом, который вводится впервые, печатается 5 раз.
a
aaaaa
По сообщению SO В чем разница между putc и ungetc? ungetc
помещает что-то обратно во входной буфер.
Так что в этой программе во время первой итерации scanf()
принимает ввод с клавиатуры и printf()
отображает это и затем ungetc()
возвращает тот же символ во входной буфер.
Но во время второй итерации вход не принимается, поэтому я предполагаю, printf()
печатает символ, который был вставлен во входной буфер ungetc()
,
Может кто-нибудь объяснить, как именно работает эта программа?
2 ответа
Согласно справочной странице ungetc()
ungetc()
выталкиваетc
обратно в поток, приведите к unsigned char, где это доступно для последующих операций чтения.
Так что, в принципе, что угодно char
Вы вводите в первый раз, что читается в c
переменная, и после печати то же значение передается во входной буфер. Сейчас, scanf()
читает из входного буфера, поэтому значение выдвигается ungetc()
доступно для следующего scanf()
читать это. Поэтому, scanf()
не просит ввода пользователя.
Теперь, когда цикл запускается 5 раз, вы встретите 5 scanf()
s, все читают первые входные данные и печатают одинаково 5 раз.
Тем не менее, всегда проверяйте возвращаемое значение scanf()
чтобы обеспечить его успех.
Это происходит:
- Ваш вклад:
a\n
scanf
читатьa
оставлять позади\n
,printf
Распечататьa
,ungetc
отталкиватьa
в буфер ввода и теперь вход сноваa\n
,- Повторите это
5
раз.