C 读取字符文件并打印整数文件
在我的fgetc.In文件中,我有9个,在fgetc.out文件中,它显示的是41而不是9。我很困惑我的代码到底出了什么问题,但我猜EOF是smth错了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;
#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;
}
@RussBearatoi()
的参数是字符串,而不是单个字符。c-'0'
是将单个数字转换为相应整数的正确方法。你是对的,实际上我把char c
与char*c
混淆了。我以前从未见过c-'0'
,谢谢。您的输入文件中可能有其他字符(如空格或换行符)。你没有做任何事情来避免它们,所以它们最终会进入你的a值计算,如果它们是数字的话。