文件操作总是失败,不能写入正确结果
我想吧“1.in”里面的数据进行统计,计算每行的结果写入到“2。out”里面,最后写入统计的行数,但是总是写入的时候结果不对,比如我的测试数据是:
23 45 67 33 77
34 45 78 9 34
12 23 56 89 89
得到的结果是:
10
10
2
再就是里面有一行代码,是把字符转换成数字的,不明白什么意思!X的初值是0,为什么这么设置??
x*=10;
x+=str-'0'
程序代码如下:
#include <stdio.h>
main()
{
FILE *fin,*fout;
fin=fopen("1.in","r");
fout=fopen("2.out","w");
int x=0,sum=0,t=0;
char str;
while(fscanf(fin,"%c",&str)!=EOF)
if(str==' ')
{
sum+=x;
x=0;
}
else if(str=='\n')
{
sum+=x;
fprintf(fout,"%d\n",str);
t+=1;
sum=0;
x=0;
}
else
{
x*=10;
x+=str-'0';
}
fprintf(fout,"%d\n",t);
fclose(fin);
fclose(fout);
return 0;
}
[解决办法]
str-'0';就是减去字符0的asic码值,因为都是按字符处理的,所以没有转换为数字,这样 也是一样的
[解决办法]
x*=10;
x+=str-'0'
str - '0' 转换单个字符数字
‘0’ - ‘0’ = 数字 0
‘1’ - ‘0’ = 数字 1
x *= 10 则可以这样理解:
例如 1234
第一次循环 x = 1
第二次 x * = 10 ===》 x = 10
x+=str-'0' ===》 x = 10 + ‘2’-‘0’ = 12
第三次 x * = 10 ===》 x = 120
x+=str-'0' ===》 x = 120 + ‘3’-‘0’ = 123
最后....x=1234
[解决办法]
else if(str=='\n')
{
sum+=x;
fprintf(fout,"%d\n",str); ------ 改为 fprintf(fout,"%d\n",sum);
t+=1;
sum=0;
x=0;
}
[解决办法]
换一种写法吧,这样写咋都感觉很便扭.
#include <stdio.h>void main( void ){ FILE *fpIn = NULL, *fpOut = NULL; int nCnt = 0, nSum = 0, i = 0; int nNum[5]; fpIn = fopen( "1.in", "r" ); fpOut = fopne( "2.out", "r" ); while( fscanf(fpIn, "%d %d %d %d %d\n", &nNum[0], &nNum[1], &nNum[2], &nNum[3], &nNum[4]) != EOF ) { nCnt ++; nSum = 0; for( i = 0; i < 5; i++ ) nSum += nNum[i]; fprintf( fpOut, "%d\n", nSum ); } fprintf( fpOut, "%d\n", nCnt ); fclose( fpIn ); fclose( fpOut );}
[解决办法]
fprintf(fout,"%d\n",sum);