如何解决从字符文件中读取并打印整数文件
在我的 fgetc.in 文件中,我有 9,而在 fgetc.out 中它显示的是 41 而不是 9。我很困惑我的代码有什么问题,但我想 EOF 有问题。
#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;
}
解决方法
您正在测试 EOF
条件下 while
的上一个读取字符。因此,在读取文件中的最后一个字符后,您将读取另一个字符并将其添加到 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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。