fgetc()不会在EOF中停止

时间:2015-05-09 12:30:24

标签: eof fgetc

试图在论坛上查看,但无法重新开始。

我正在尝试阅读文字。文字是: “到b”

但是在使用fgetc()时,未达到EOF,最后我得到'\ n'然后是无限'y'样本。

这是我的代码:

Node* getBinTree(FILE *fsrc){
    Node* root=NULL;
    unsigned char tmp=NULL;
    while ((tmp=fgetc(fsrc))!=EOF)
        globalArray[tmp]++;
    return root;

}

非常感谢

3 个答案:

答案 0 :(得分:2)

您遇到的麻烦与fgetc返回的内容有关。返回类型为int,但您将其存储到unsigned char

您必须将此更改为int,或者使用feof来检查文件结束条件。

答案 1 :(得分:1)

使用int tmp。 EOF不能存储在char中,因为它不是char。

答案 2 :(得分:1)

fgetc()返回一个有符号整数,但是你的程序将结果存储在unsigned char中。当从有符号类型转换为无符号类型时,负数(EOF通常定义为-1)变为正数(在这种情况下为十进制256),因此如果EOF为负数,则返回值与EOF的比较将始终返回false 。要修复代码,请将“tmp”的声明从“unsigned char”更改为“int”。