下面代码哪里出错了啊。。也不报错,就是没有结果
#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