使用fgetc()从文件读取时的奇怪结束值

时间:2014-04-30 12:29:34

标签: c fgetc

我正在使用fgetc()从仅由数字组成的文件中读取字符。然后我将字符转换为int并将其打印出来。没关系。但在打印完所有数字后,最后我得到-38-49个值。我用Google搜索了,但那里没有任何关于它的信息。 在输入文件中,我有以下内容:0105243100000002200000010001318123 outpuf是这样的:0105243100000002200000010001318123-38-49 我的代码:

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

2 个答案:

答案 0 :(得分:1)

您正在读取换行符(10)和EOF返回值fgetc(-1)。提取' 0' (48)从那些产生负数。

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

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

答案 1 :(得分:0)

使用fgetc阅读文件时,您应首先检查EOF ,以检测文件的结尾

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

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