_Zora. 2021-12-29 23:08 采纳率: 75%
浏览 54
已结题

C语言中文件操作为什么在函数调用中读不了文件内容?

不知道为什么在select函数中读不了文件的内容,也不知道程序哪里错了,救救孩子吧,孩子已经改了一天都找不到错误在哪里,如果能帮忙指点,一定会积极采纳!谢谢啦!!!

img

img

img

img

-

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-12-30 17:15
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <cstdio>
    struct  huanjingcanshu {
        int   month;
        int   date;
        float temperature;
        float humidity;
        float lux;
        float ph;
    };
    double select(FILE* f2,int month) 
    {
         
        //rewind(f2); 
        struct huanjingcanshu b[3]; 
        int i,j=0; 
        double aver = 0;
        for(i=0;i<3;i++) 
        { 
            fread(&b[i], sizeof(struct huanjingcanshu), 1, f2);
            printf("%d %d %f %f %f %f\n",b[i].month,b[i].date,b[i].temperature,b[i].humidity,b[i].lux,b[i].ph); 
            if(b[i].month==month) 
            {
                aver += b[i].temperature;
                j++;
            } 
        } 
        if (j != 0)
            aver=aver/j;
        //fclose(f2); 
        return aver; 
    } 
    void input_data()
    {
        int i;
        struct huanjingcanshu a[3];
        FILE* fp = fopen("d:\\record.dat", "wb");
        if (NULL == fp)
        {
            printf("打开失败\n");
            exit(0);
        }
        printf("请输入具体数值\n");
        for (i = 0; i < 3; i++)
        {
            scanf("%d %d %f %f %f %f", &a[i].month, &a[i].date, &a[i].temperature, &a[i].humidity, &a[i].lux, &a[i].ph);
            fwrite(&a[i], sizeof(struct huanjingcanshu), 1, fp);
        }
        fclose(fp);
    }
    int main() 
    { 
        double aver;
        char   ch;
        int    i, mon, jj = 0;
        FILE* fp;
        while(1)
        { 
            printf("初始化:s  查询:g  退出:q\n"); 
            scanf(" %c", &ch);
            getchar();
            if (ch == 'q') {
    
                break;
                //exit(0);
            } 
            else if(ch=='g'){
                printf("请输入月份\n");
                scanf("%d", &mon);
                fp = fopen("d:\\record.dat", "rb");
                if (NULL == fp)
                {
                    printf("打开失败\n");
                    break;              //exit(0);
                }
                aver = select(fp, mon);
                fclose(fp);
                printf("月平均气温为:%lf\n", aver);
            }
            else if (ch == 's') {
                input_data();
            }
        } 
        return 0; 
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月29日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。