【发布时间】:2015-07-10 12:33:50
【问题描述】:
我不明白这个程序是如何工作的?
char c;
int i;
for(i=1;i<=5;i++)
{
scanf("%c",&c);
printf("%c",c);
ungetc(c,stdin);
}
程序的输出是-第一次输入的字符被打印5次。
a
aaaaa
根据 SO post What is the difference between putc and ungetc? ungetc 将某些内容放回输入缓冲区。
所以在这个程序的第一次迭代中,scanf() 接受来自键盘的输入,printf() 显示它,然后ungetc() 将相同的字符推回输入缓冲区。
但是在第二次迭代期间没有输入被接受,所以我猜printf() 打印了由ungetc() 推入输入缓冲区的字符。
有人可以清楚地解释这个程序是如何工作的吗?
【问题讨论】:
-
我认为按回车键时添加的换行符会妨碍您。
-
您实际上解释得很好,只需删除“我在猜测”即可。
scanf()从输入缓冲区读取。ungetc()已经放了一些东西,所以不需要等待更多的输入。