【问题标题】:Weird end values when reading from file using fgetc()使用 fgetc() 从文件读取时出现奇怪的结束值
【发布时间】:2014-04-30 12:29:34
【问题描述】:

我正在使用fgetc() 从仅包含数字的文件中读取字符。然后我将字符转换为 int 并打印出来。没关系。但是在打印出所有数字之后,最后我得到了-38-49 值。我用谷歌搜索了它,但没有关于它的内容。 在输入文件中,我有以下内容:0105243100000002200000010001318123 输出是这样的:0105243100000002200000010001318123-38-49 我的代码:

do
    {
        c1 = fgetc(fread)-'0';
        if (!isspace(c1))
        {
            printf("%d", c1); 
        }       
        if (feof(fread))
        {
            break;
        }
    } while (1);

【问题讨论】:

  • 另一个问题isspace(c1) -> isspace(c1+'0')
  • 您应该在打印 c1 之前检查feof,或者在减去“0”之前检查fgetc 是否返回EOF

标签: c fgetc


【解决方案1】:

您正在读取换行符 (10) 和 fgetc (-1) 的 EOF 返回值。从这些中减去“0”(48)会产生那些负数。

检查char是否有效,必须在['0','9']范围内

c1 = fgetc(fread);
if(c1 >= '0' && c1 <= '9') {
  c1 -= '0';
  // ...
}

【讨论】:

    【解决方案2】:

    当读取带有fgetc 的文件时,您应该检查EOF 首先,以检测文件的结尾

    int c, n;
    while ((c = fgetc(f)) != EOF) {
        if (isdigit(c)) {
            n = c - '0';
            printf("%d", n);
        }
    }
    

    否则,您使用EOF 值并得到否定结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多