gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:53 27 4
gpt4 key购买 nike

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

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

为什么当我输入诸如“omar”之类的文本时,将 char 打印“omar”放回原处。它不应该重复打印“o”吗,因为 getchar 将只接受第一个字符。我知道我错了可能是因为我不知道 getchar 或 putchar 究竟是如何工作的,所以有人可以解释一下它们是如何工作的。另一个问题是为什么 getchar 和 putchar 在没有 while 循环的情况下正常工作,但在 while 循环内部行为却有所不同。

最佳答案

why getchar() function work different in a loop?

我认为您是在问为什么 getchar() 的工作方式与您预期的不同,而不是与其他情况下的不同。如果您实际上指的是后者,那么答案将是“它不是”。

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

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


另外,请注意 getchar() 返回类型为 int 的结果,这样它至少可以返回一个值,EOF,即超出类型 unsigned char 的范围。如果将结果转换为 char 类型,那么要么存在一个您会误认为 EOF 的实际输入值,要么永远不会检测到 EOF,具体取决于 char 是否已签名或未签名。要可靠且可移植地检测文件结尾,您必须将返回值处理为 int,而不是 char

关于c - 为什么 getchar() 函数在循环中工作不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652462/

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