c语言 文件的输入与输出

下面代码哪里出错了啊。。也不报错,就是没有结果

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

 

#define N 3

 

float RAND(int, int);

 

struct stu{

    char name[7];

    float height;

    float weight;

    float score;

} body[N],a,*pb;

 

int main(void){

    pb = body;

    FILE *fp;

    int i;

 

    if((fp = fopen("dome.txt","wb+"))==NULL){

        puts("dome.txt文件打开失败!\n");

        exit(1);

    }

    puts("请输入姓名:");

    for(i=0;i<N;i++,pb++){

        scanf("%s",pb->name);

    }

 

    puts("请输入身高,体重,成绩:");

    puts("\n");

 

    for (i = 0;i< N; i++,pb++){

        pb->height = RAND(160,185);

        pb->weight = RAND(50, 100);

        pb->score  = RAND(90, 100);

    }

 

    fwrite(body, sizeof(struct stu), N, fp);

    fseek(fp, sizeof(struct stu), SEEK_SET);

    fread(&a, sizeof(struct stu), 1, fp);

    printf("姓名:%s\n身高:%f\n体重:%f\n成绩:%f\n", a.name,a.height,a.weight,a.score);

    fclose(fp);

    return 0;

}

 

float RAND(int a, int b){

    float x;

    srand((unsigned)time(NULL) + rand());

    x = rand() % (b - a + 1) + a;

    return x;

}

 

 

 

for(i=0;i<N;i++,pb++){

        scanf("%s",pb->name);

    }

你这一个循环已经将pb指针移动到数组的尾部了,那么在输入身高等的循环里,pb就不知道上哪里去了。在输入身高的循环开始之前,增加pb = body;将pb复位到数组的头部。

 

fread(&a, sizeof(struct stu), 1, fp);这只是读了一个学生信息,实际写入的是多个学生信息

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m