关于ungetc函数的混淆



我不明白这个程序是如何工作的?

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
  • ungetca推回输入缓冲区,现在输入再次为an
  • 重复此5次。

相关内容

  • 没有找到相关文章

最新更新