gpt4 book ai didi

混淆 regrading ungetc 函数

转载 作者:行者123 更新时间:2023-12-02 00:58:40 26 4
gpt4 key购买 nike

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

char c;
int i;
for(i=1;i<=5;i++)
{
scanf("%c",&c);
printf("%c",c);
ungetc(c,stdin);
}

程序的输出是- 第一次输入的字符被打印了5次。

a
aaaaa

根据 SO 帖子 What is the difference between putc and ungetc? ungetc 将某些内容放回输入缓冲区。

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

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

谁能清楚地解释一下这个程序究竟是如何工作的?

最佳答案

根据 man page ungetc()

ungetc() pushes c back to stream, cast to unsigned char, where it is available for subsequent read operations.

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

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

就是说,始终检查 scanf() 的返回值以确保它成功。

关于混淆 regrading ungetc 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com