gpt4 book ai didi

c - 文件读取程序在 while 循环结束时挂起 (linux c)

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:34 28 4
gpt4 key购买 nike

抱歉这个琐碎的问题。我正在逐个字符地读取文件。它似乎一直工作到最终运行 (EOF),由于某种原因程序挂起。

while 循环的最后一行“Done outer loop, in is 0”被打印出来了,但是由于某种原因,即使条件为“(in != '0')”,循环也不会退出。 “完成的解析事件”行不打印,程序停止并且没有响应。

char in = '1';
FILE *fid = fopen(filename, "r");
while (in != '0') {
printf("Start of loop, in is %c\r\n", in);
if ((in = fgetc(fid)) == EOF)
in = '0';

/* Large block that does stuff depending on the value of in*/

printf("Done outer loop, in is %c\r\n", in);

}

fclose(fid);
printf("Finished parsing events");
//fflush(stdout);

最佳答案

尝试改变:

char in = '1';

收件人:

int in = '1';

首先fgetc函数的返回类型是int。当您到达文件末尾时 EOF 被返回(这很可能是 -1,我假设它等于 -1)。然后将-1存储在in变量中,类型为char。标准中没有定义 char 是否有符号,在你的情况下它似乎是无符号的,所以 in 变成 255。然后将in提升为int类型与EOF进行比较,当然255 != -1,所以你处于无限循环中。

关于c - 文件读取程序在 while 循环结束时挂起 (linux c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120291/

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