test.txt 中有数字式1 2 3 4 5 6 0     
         CFile MyFile;
int sum = 0;
int count = 0;
int data;
if (MyFile.Open("test.txt",CFile::modeRead) ==FALSE) //open file
{
MessageBox("file erro");
}

do
{
MyFile.Read((void*)&data,sizeof(int));
sum += data; //累加
count++; // 计算个数
} while (data != 0);  //为0时结束
MyFile.Close(); //close file
CString output;
output.Format("%f %d %d",(float)sum/count,sum,count);
pDC->TextOut(0,0,output);//output 平均直,累加和,个数

解决方案 »

  1.   

    看不出来!:(到底出的是啥问题?结果不对吗?在循环中和文件关闭后都加上TRACE查一下sum和count值。
      

  2.   

    对了你存入txt的是字符串还是int型数据?
    如果是字符串那么总共才7个字节,读取int型的怎么可能?读2次就跑了。怎么data=0哦。
      

  3.   

    to tangmasi TRACE咋加? 他运行后对话框上没有数据,运行不完好象已死了!
    没有结果!我存在TEST.TXT中的是INT型数据,我的数据结尾是0(判断0就跳出循环了),
    我调是的另外一个程序也是这样的能用,只不过读出后是用数组来存放的!
      

  4.   

    难道读文件没有EOF宏之类的东西吗(或者是函数)
      

  5.   

    显示在文本框中用pDC么?请教
      

  6.   

    你能不能发到我邮箱里来,我来看看。。[email protected]
      

  7.   

    你的这段代码没有问题,我已经测试过了。很可能是你的test.txt不对。 
    请确信你的test.txt在16进制下是以下面方式显示
    010000000200000003000000004000000050000000600000000000000
      

  8.   

    你的文件内容是文本呀还是二进制呀?
    如果是二进制的话,这样做肯定不对,每次需要read 1个字符,然后,把它atoi变成一个数字再和你的sum相加
      

  9.   

    MyFile.Read((void*)&data,sizeof(int));
    error?
      

  10.   

    肯定是文本文件。你搞错了,需要转化的。先按字符串读出来,然后atoi(),转化成数字,再相加!
      

  11.   

    char digitalstr[64] = {0};
    char temp[2] = {0};
    do
    {
      for( ; !strcmp(temp," ") && MyFile.GetPosition() < MyFile.GetLength(); )
      {
        MyFile.Read(temp,1);
        strcat(digitalstr,temp);
      }
      count ++;
      sum + = itoa(digitalstr);   // 后边的多余空各不影响转化
    }while(MyFile.GetPosition() < MyFile.GetLength());
      

  12.   

    建议你习惯用Uedit之类文本编辑器检查文件,好处是任何文件它都能以二进制或文本文件形式读出。如果你新建一个记事本文件并输入1 2 3 4 5 6 0,
    使用Uedit打开可以看到
    00000000h:31 20 32 20 33 20 34 30 35 20 36 20 30   ;1 2 3 4 5 6 0
    程序读入的实际上都是左边的值。如果想按你的思路,希望程序能直接从txt文件中读取十进制数据来进行运算的话,代码的确应该修改一下。
    同意FreeSeagull(孤海闲鸥)的思路:先将每个数字按字符串读出来,以空格为数字分界,然后atoi(),转化成数字,再相加!