首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混乱--重新分级-- ungetc函数

混乱--重新分级-- ungetc函数
EN

Stack Overflow用户
提问于 2015-07-10 12:33:50
回答 2查看 2.4K关注 0票数 2

我不明白这个程序是怎么工作的?

代码语言:javascript
复制
char c;
int i;
for(i=1;i<=5;i++)
{
     scanf("%c",&c);
     printf("%c",c);
     ungetc(c,stdin);
}

程序输出为第一次输入的字符,打印5次.

代码语言:javascript
复制
a
aaaaa

因此,post putc和ungetc之间有什么区别? ungetc将一些东西放回输入缓冲区。

因此,在这个程序中,在第一次迭代期间,scanf()接受来自键盘的输入,printf()显示输入,然后ungetc()将相同的字符推回输入缓冲区。

但是在第二次迭代中,没有输入被接受,所以我猜printf()会打印被ungetc()推入输入缓冲区的字符。

有人能清楚地解释一下这个程序是如何工作的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-10 12:36:28

根据手册页 of ungetc()

ungetc()c推回流,强制转换为无符号字符,在那里它可用于后续的读取操作。

因此,基本上,无论您第一次输入什么char,都是在c变量中读取的,打印之后,相同的值将被推送到输入缓冲区。现在,scanf()从输入缓冲区中读取,因此ungetc()推送的值可供下一个scanf()读取。这就是为什么scanf()没有要求用户输入的原因。

现在,当循环运行5次时,您将遇到5个scanf(),它们都读取了第一个输入数据,并打印了相同的5次。

尽管如此,始终检查scanf()的返回值以确保其成功。

票数 3
EN

Stack Overflow用户

发布于 2015-07-10 12:57:15

这种情况正在发生:

  • 您的输入:a\n
  • scanfa,留下\n
  • printf打印a.
  • ungetca推回输入缓冲区,现在输入又是a\n
  • 重复这个5时间。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31340897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档