gpt4 book ai didi

c - 设置输入流在循环中重复返回 EOF

转载 作者:行者123 更新时间:2023-12-04 09:41:04 24 4
gpt4 key购买 nike

我是这样写的:

#include<stdio.h>

int main(void)
{
int input=0;

while(input=getchar()) //TARGET
printf("%d\n",input);
}

我有意使用没有 !=EOF 的循环。我问的是在按下 ctrl+d 后设置了什么位,因为即使没有输入任何输入它也会继续打印 -1 - 表明必须设置了一些错误位对于使 getchar() 重复返回 -1 的流 - 我想知道那是什么。以及这整件事背后的原因。

以及如何将流再次重置为正常状态。

这是linux上的一个输入。

最佳答案

流的 end-of-file 标志在到达 EOF 时设置。这是 feof() 函数测试的标志。

如果你想阅读过去,你可以使用 clearerr()功能。这会清除错误和 EOF 指示器(我认为没有办法只清除其中一个)。

int main(void)
{
int input=0;

while(input=getchar()) { //TARGET
printf("%d\n",input);
if (feof(stdin) || ferror(stdin)) {
clearerr(stdin);
}
}
}

请注意,您是否真的可以在 EOF 之后读取任何内容取决于系统和设备。如果stdin是终端或普通文件,EOF是临时条件(用户输入Ctl-d后可以在终端继续敲,可以往里面添加更多的数据一份文件)。但是一旦到达 TCP 流的末尾,就无法向其中添加任何内容。

关于c - 设置输入流在循环中重复返回 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58614966/

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