我不明白这个程序是怎么工作的?
char c;
int i;
for(i=1;i<=5;i++)
{
scanf("%c",&c);
printf("%c",c);
ungetc(c,stdin);
}程序输出为第一次输入的字符,打印5次.
a
aaaaa因此,post putc和ungetc之间有什么区别? ungetc将一些东西放回输入缓冲区。
因此,在这个程序中,在第一次迭代期间,scanf()接受来自键盘的输入,printf()显示输入,然后ungetc()将相同的字符推回输入缓冲区。
但是在第二次迭代中,没有输入被接受,所以我猜printf()会打印被ungetc()推入输入缓冲区的字符。
有人能清楚地解释一下这个程序是如何工作的吗?
发布于 2015-07-10 12:36:28
根据手册页 of ungetc()
ungetc()将c推回流,强制转换为无符号字符,在那里它可用于后续的读取操作。
因此,基本上,无论您第一次输入什么char,都是在c变量中读取的,打印之后,相同的值将被推送到输入缓冲区。现在,scanf()从输入缓冲区中读取,因此ungetc()推送的值可供下一个scanf()读取。这就是为什么scanf()没有要求用户输入的原因。
现在,当循环运行5次时,您将遇到5个scanf(),它们都读取了第一个输入数据,并打印了相同的5次。
尽管如此,始终检查scanf()的返回值以确保其成功。
发布于 2015-07-10 12:57:15
这种情况正在发生:
a\nscanf读a,留下\n。printf打印a.ungetc将a推回输入缓冲区,现在输入又是a\n。5时间。https://stackoverflow.com/questions/31340897
复制相似问题