读书人

文件操作总是失败不能写入正确结果,

发布时间: 2012-04-08 14:38:30 作者: rapoo

文件操作总是失败,不能写入正确结果
我想吧“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;
}

[解决办法]
换一种写法吧,这样写咋都感觉很便扭.

C/C++ code
#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 );}
[解决办法]
探讨
问一下一楼,
x*=10;
和x得初值为0是什么意思?

[解决办法]
C/C++ code
fprintf(fout,"%d\n",sum); 

读书人网 >C语言

热点推荐