注册 登录
编程论坛 C语言论坛

关于文件读取 while(fgetc(fp) != EOF)

风过无痕1989 发布于 2020-10-14 16:23, 2127 次点击
以下程序若去掉注释部份,最后一个数据就读不到,请帮修改程序

程序代码:

// 从文本文件"data.txt"中取出数据,并计算平均值,方差

#include<stdio.h>
#include <math.h>
#define hh printf("\n=======================================\n");
void main()
{
    FILE *fp;
    float x,avr,fc,a[520],sum = 0.0;
    int i,k = 0;
    fp = fopen("D:\\data.txt","r");
    if(fp == NULL)
    {
        printf("文件打开失败!\n");
    }
    else
    {
        printf("读取数据:\n");
        fscanf(fp,"%f",&x);

        while(!feof(fp))
        {
            a[k++] = x;
            printf("%.0f ",x);
            sum += x;
            fscanf(fp,"%f",&x);
        }

/*      fscanf(fp,"%f",&x);
        a[k++] = x;
        printf("%.0f ",x);
        sum += x;            
*/

        avr = sum / k;             // k 为读到的数据个数
        sum = 0;
        for(i = 0;i < k;i++)
        {
            sum += (a[i] - avr) * (a[i] - avr);
        }
        fc = sum / (k - 1);
        hh
        printf("  读取个数:%d\n",k);
        printf("  平 均 值:%.2f\n",avr);
        printf("  方    差:%.2f\n",fc);

    }
    hh
    fclose(fp);
}
6 回复
#2
rjsp2020-10-14 17:10
改掉数个错误及不好的地方

程序代码:
#include <stdio.h>

int main( void )
{
    FILE* fp = fopen("D:\\data.txt","r");
    if(fp == NULL)
    {
        printf("文件打开失败!\n");
        return 1;
    }

    puts( "读取数据:" );
    size_t k = 0;
    float sum=0.0f, sum2=0.0f;
    for( float x; fscanf(fp,"%f",&x)==1; ++k )
    {
        sum2 += x*x;
        sum += x;
        printf( "%.0f ", x );
    }
    fclose( fp );

    puts( "\n=======================================" );
    float avr = sum / k;
    float fc = (sum2 - sum*sum/k)/(k-1);
    printf("  读取个数:%d\n",k);
    printf("  平 均 值:%.2f\n",avr);
    printf("  方    差:%.2f\n",fc);
}
#3
rjsp2020-10-14 17:12
接2楼,这里就不应该用 float,而是应该用 double。
#4
风过无痕19892020-10-14 18:52
回复 3楼 rjsp
不行,VC++6.0与DEV_C++都不能正常编译
#5
rjsp2020-10-14 19:23
回复 4楼 风过无痕1989
那就算了
#6
风过无痕19892020-10-16 00:22
顶上去,看看还有没有朋友能帮我
#7
风过无痕19892020-10-16 13:09
回复 5楼 rjsp
我通过修改你的程序,已经解决好了这个问题,谢谢你的思路和程序!
1