我不明白这个程序是如何工作的?
char c;
int i;
for(i=1;i<=5;i++)
{
scanf("%c",&c);
printf("%c",c);
ungetc(c,stdin);
}
程序输出为-字符,第一次输入,打印5次。
a
aaaaa
根据SO post, put和unget之间的区别是什么?ungetc
将一些东西放回输入缓冲区。
所以在这个程序中,在第一次迭代中,scanf()
接受来自键盘的输入,printf()
显示它,然后ungetc()
将相同的字符推回输入缓冲区。
但是在第二次迭代中没有输入被接受,所以我猜测printf()
打印由ungetc()
推入输入缓冲区的字符。
谁能清楚地解释一下这个程序是如何工作的?
根据ungetc()
手册页
ungetc()
将c
压回流,转换为unsigned char,供后续的读操作使用。
所以,基本上,无论您第一次输入的是什么char
,它都将在c
变量中读取,并且在打印之后,相同的值将被压入输入缓冲区。现在,scanf()
从输入缓冲区中读取,因此ungetc()
推送的值可供下一个scanf()
读取。这就是为什么scanf()
没有要求用户输入。
现在,当循环运行5次时,您将遇到5个scanf()
s,它们都读取第一个输入数据,并打印相同的5次。
也就是说,始终检查scanf()
的返回值以确保它成功。
正在发生:
- 您的输入:
an
-
scanf
读取a
,留下n
。 -
printf
打印a
。 -
ungetc
将a
推回输入缓冲区,现在输入再次为an
。 - 重复此
5
次。