- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白这个程序是如何工作的?
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()
pushesc
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/
我使用以下代码将其输入到stdin“11+3”,并且 void main(void) { int number; printf("the first call : %d\n", sca
ungetc 只保证接受一个字节的回传。另一方面,我已经在 Windows 和 Linux 上对其进行了测试,它似乎可以使用两个字节。 是否有任何平台(例如任何当前的 Unix 系统)实际上只占用一个
我不明白这个程序是如何工作的? char c; int i; for(i=1;i<=5;i++) { scanf("%c",&c); printf("%c",c); un
我不明白这个程序是如何工作的? char c; int i; for(i=1;i<=5;i++) { scanf("%c",&c); printf("%c",c); un
假设我有一个由 fopencookie 创建的 FILE*,如果我在 FILE* 上调用 ungetc 会发生什么>?假设我在 FILE* 上设置了 setvbuf 作为 _IONBF 以使其无缓冲。
Python中的一些文件读取(readlines())函数 将文件内容复制到内存(作为列表) 我需要处理一个太大的文件 被复制到内存中,因此需要使用 一个文件指针(访问文件一个字节 一次)——就像在
在标准C库中,ungetc()不写入文件吗? 它只移动文件位置吗? 可以不事先阅读就使用吗?即它可以独立于其他 IO 函数使用吗? 是否可以在不需要一次一个字符的读取功能之后使用它,即一次读取多个字符
ungetc() 似乎在某些字符上失败。这是一个简单的测试程序: #include int main(void) { int c; printf("Type a letter and
是否有 ungetc 的 C++ 版本? 也就是说,我可以将角色放回 istream 吗? 最佳答案 是的。 istream::putback与 ungetc except if using unge
我想知道 std::cin::ungetc 接受多少个字符。它与 C 中的相同吗(因此可移植 1,见下文)? 相关 SO 帖子 "ungetc: number of bytes of pushback
int ungetc(int c, FILE *fp) 将字符 c 推回 fp,并返回 c 或 EOF 作为错误。 where as int putc(int c, FILE *fp) 将字符 c 写
我想在收到 SIGUSR1 时使用 ungetc 将一个“A”字符填回标准输入。想象一下,我有充分的理由这样做。 当调用 foo() 时,stdin 中的阻塞读取不会在收到信号时被 ungetc 调用
我猜想,在 scanf("%d") 之后 ungetc() 可能会失败,因为 scanf 可能会为第一个非数字字符隐式调用 ungetc()。 但如果格式以 %c 结尾,就不会发生这种情况,对吗? 最
我遇到过这样一个 getword 的例子。我了解所有检查等,但我对 ungetc 有疑问。 当c满足if ((!isalpha(c)) || c == EOF)且不满足while (isalnum (
我无法理解我的程序的行为。它调用 scanf,然后是 ungetc,然后是 printf。 我无法理解输出行为背后的原因。这是代码。如果有人澄清了行为,将会有很大的帮助。 int main() {
在我的代码中,我试图完成这样的事情(用伪代码编写): While not at EOF: Get line Write line to different file Skip
我是 C 初学者,我想连续调用 ungetc() 两次,尽管我知道在常规 C 中这是不允许的。有人告诉我可以修改 Fflush() 来完成这项工作,但我不知道该怎么做。 这是我的代码,我的Fflush
我在看一本关于linux编程的书时想到了,我在我的电脑上试了一下,代码运行良好,但我就是不明白它是如何工作的,希望有人能帮我解释一下, 提前致谢!我的代码如下: #include #include
谁能给我解释一下ungetch的用途?这是来自 K&R 第 4 章,您将在其中创建反向波兰计算器。 我在没有调用 ungetch 的情况下运行了该程序,在我的测试中它仍然可以正常工作。 int ge
我正在将 net-snmp 移植到一个嵌入式平台,该平台对文件系统的访问权限有限,但我偶然发现了一个大问题。有一部分核心代码使用了 ungetc() 函数,但我没有。当然有两种解决方案: A)使用我拥
我是一名优秀的程序员,十分优秀!