首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文件操作总是失败,不能写入正确结果,该怎么解决

2012-04-08 
文件操作总是失败,不能写入正确结果我想吧“1.in”里面的数据进行统计,计算每行的结果写入到“2。out”里面,最

文件操作总是失败,不能写入正确结果
我想吧“1.in”里面的数据进行统计,计算每行的结果写入到“2。out”里面,最后写入统计的行数,但是总是写入的时候结果不对,比如我的测试数据是:

23 45 67 33 77
34 45 78 9 34
12 23 56 89 89

得到的结果是:

10
10


再就是里面有一行代码,是把字符转换成数字的,不明白什么意思!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); 

热点排行