为什么 getchar() 函数在循环中工作不同?

why getchar() function work different in a loop?

#include <stdio.h>
int main()
{
    char c;

    while ((c=getchar()) != EOF)
        putchar(c);
}

为什么当我输入诸如 "omar"put char print "omar" 之类的文本时。它不应该重复打印 'o' 吗,因为 getchar 将获取第一个字符 only.I 知道我错了,可能是因为我不知道 getchar 或 putchar 究竟是如何工作的,所以有人可以解释一下他们 works.Another 为什么 getchar 和 putchar 在没有 while 循环但在 while 内正常工作的问题循环行为有所不同。

why getchar() function work different in a loop?

我带你问为什么 getchar() 的工作方式与你预期的不同,而不是 与其他情况下的不同.如果您实际上是指后者,那么答案将是 "it doesn't."

但是当然从流中读取一个字符,无论是通过 getchar() 还是其他一些 I/O 函数,都会将其从流中删除。如果不这样做,getchar() 将不会很有用。因此,如果您重复调用它,您将依次读取(并删除)每个字符,直到且除非所有可用字符都被消耗完。您可以通过将程序中的循环替换为行中的多个 getchar() 调用来进行测试。

当然,您的循环 重复调用它。循环控制表达式 (c=getchar()) != EOF 在循环的每次迭代之前进行计算,这涉及调用 getchar()(与使用先前由该函数 return 编辑的值相反)。


在一个完全独立的注释中,请注意 getchar() return 是类型 int 的结果,正是这样它可以 return 至少一个值, EOF,即超出类型unsigned char的范围。如果将结果转换为 char 类型,那么要么存在一个您会误认为 EOF 的真实输入值,要么永远检测不到 EOF,具体取决于 char 是有符号还是无符号。要可靠且可移植地检测文件末尾,您必须将 return 值 处理为 int,而不是 char.