标题:关于文件读取 while(fgetc(fp) != EOF)
只看楼主
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
结帖率:88.89%
已结贴  问题点数:20 回复次数:6 
关于文件读取 while(fgetc(fp) != EOF)
以下程序若去掉注释部份,最后一个数据就读不到,请帮修改程序

程序代码:
// 从文本文件"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);
}
搜索更多相关主题的帖子: sum printf while 文件 读取 
2020-10-14 16:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
改掉数个错误及不好的地方

程序代码:
#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);
}
2020-10-14 17:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
接2楼,这里就不应该用 float,而是应该用 double。
2020-10-14 17:12
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 3楼 rjsp
不行,VC++6.0与DEV_C++都不能正常编译
2020-10-14 18:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 4楼 风过无痕1989
那就算了
2020-10-14 19:23
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
顶上去,看看还有没有朋友能帮我
2020-10-16 00:22
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
得分:0 
回复 5楼 rjsp
我通过修改你的程序,已经解决好了这个问题,谢谢你的思路和程序!
2020-10-16 13:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503472-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.674970 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved