我不明白这个程序是如何工作的?
char c;
int i;
for(i=1;i<=5;i++)
{
scanf("%c",&c);
printf("%c",c);
ungetc(c,stdin);
}
程序的输出是- 第一次输入的字符被打印了5次。
a
aaaaa
根据 SO 帖子 What is the difference between putc and ungetc? ungetc
将某些内容放回输入缓冲区。
所以在这个程序中,在第一次迭代期间,scanf()
接受来自键盘的输入,然后 printf()
显示它,然后 ungetc()
将相同的字符推回输入缓冲区。
但是在第二次迭代期间没有输入被接受,所以我猜测 printf()
打印被 ungetc()
插入输入缓冲区的字符。
谁能清楚地解释一下这个程序究竟是如何工作的?
最佳答案
根据 man page ungetc()
ungetc()
pushesc
back to stream, cast to unsigned char, where it is available for subsequent read operations.
所以,基本上,无论您第一次输入什么 char
,它都会被读取到 c
变量中,并且在打印之后,相同的值会被推送到输入缓冲区。现在,scanf()
从输入缓冲区读取,因此 ungetc()
推送的值可供下一个 scanf()
读取它。这就是为什么 scanf()
不会请求用户输入。
现在,随着循环运行 5 次,您将遇到 5 个 scanf()
,它们都读取第一个输入数据,并打印相同的数据 5 次。
就是说,始终检查 scanf()
的返回值以确保它成功。
关于混淆 regrading ungetc 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340897/