C 读取字符文件并打印整数文件

C 读取字符文件并打印整数文件,c,char,integer,C,Char,Integer,在我的fgetc.In文件中,我有9个,在fgetc.out文件中,它显示的是41而不是9。我很困惑我的代码到底出了什么问题,但我猜EOF是smth错了 #include<stdio.h> int main(){ FILE *in = fopen("fgetc.in", "r"); FILE *out = fopen("fgetc.out", "wt"); char c;

在我的fgetc.In文件中,我有9个,在fgetc.out文件中,它显示的是41而不是9。我很困惑我的代码到底出了什么问题,但我猜EOF是smth错了

#include<stdio.h>


int main(){
    FILE *in = fopen("fgetc.in", "r");
    FILE *out = fopen("fgetc.out", "wt");

    char c;
    int a = 0;
    c = fgetc ( in );
    a = c - '0';
    while(c != EOF ){
        c = fgetc ( in );
        a = a * 10 + (c - '0');
    }
    fprintf(out, "%d" , a);

    fclose(in);
    fclose(out);
    return 0;
}
#包括
int main(){
文件*in=fopen(“fgetc.in”,“r”);
FILE*out=fopen(“fgetc.out”、“wt”);
字符c;
int a=0;
c=fgetc(英寸);
a=c-‘0’;
而(c!=EOF){
c=fgetc(英寸);
a=a*10+(c-‘0’);
}
fprintf(out,“%d”,a);
fclose(in);
fclose(out);
返回0;
}
您正在
while
条件下测试前一个读取字符的
EOF
。因此,在读取文件中的最后一个字符后,您将读取另一个字符并将其添加到
a
。下一个字符将是
EOF
,其值为
-1
。所以你要计算一下

a = 9 * 10 + (-1 - '0');
这是
41

您需要在读取字符后但在使用之前检查EOF

另外,
fgetc()
返回
int
,而不是
char
,因为
char
可能无法保存
EOF
值。您需要将
c
声明为
int

#include<stdio.h>

int main(){
    FILE *in = fopen("fgetc.in", "r");
    FILE *out = fopen("fgetc.out", "wt");

    int c;
    int a = 0;
    while(1){
        c = fgetc ( in );
        if (c == EOF) {
            break;
        }
        a = a * 10 + (c - '0');
    }
    fprintf(out, "%d" , a);

    fclose(in);
    fclose(out);
    return 0;
}
#包括
int main(){
文件*in=fopen(“fgetc.in”,“r”);
FILE*out=fopen(“fgetc.out”、“wt”);
INTC;
int a=0;
而(1){
c=fgetc(英寸);
如果(c==EOF){
打破
}
a=a*10+(c-‘0’);
}
fprintf(out,“%d”,a);
fclose(in);
fclose(out);
返回0;
}

@RussBear
atoi()
的参数是字符串,而不是单个字符。
c-'0'
是将单个数字转换为相应整数的正确方法。你是对的,实际上我把
char c
char*c
混淆了。我以前从未见过
c-'0'
,谢谢。您的输入文件中可能有其他字符(如空格或换行符)。你没有做任何事情来避免它们,所以它们最终会进入你的a值计算,如果它们是数字的话。