【问题标题】:fgetc() doesn't stop in EOFfgetc() 不会在 EOF 中停止
【发布时间】:2015-05-09 12:30:23
【问题描述】:

尝试在论坛上查找,但无法解决。

我正在尝试阅读文本。文字是: “给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;

}

非常感谢

【问题讨论】:

  • 非常感谢大家!

标签: eof fgetc


【解决方案1】:

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

您必须将其更改为 int,或者作为替代方法,使用 feof 检查文件结束条件。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-06-18
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 2012-11-21
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        相关资源
        最近更新 更多