快来帮帮忙~!~!~文件那章的问题 50分~!~!

Gpa 2002-08-19 09:47:23
#include <stdio.h>

#define SIZE 5

typedef struct student
{
int num;
char name[10];
float score;
float averge;
struct student *next;
}student;

void main()
{
FILE *fp;
student *h,*p;
int i;
if( (fp=fopen("stud.txt","w"))==NULL )
{
printf("Can't open the file");
exit(1);
}

h=p=(student *)malloc(sizeof(student));
for(i=0;i<SIZE;i++)
{
printf("please input num name score\n");
scanf("%d%s%3.2f",&p->num,p->name,&p->score);
p->averge=p->score/3;
p->next=(student *)malloc(sizeof(student));

}
p->next=NULL;

for(p=h,i=0;i<SIZE;p=p->next)
fwrite(p,sizeof(student),1,fp);/*这里为什么p是指针不行*/
fclose(fp);
}
这里输入时还有一个问题,只可以输两个之后不行了,不会是我的编译器问题吧?
...全文
34 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
boodweb 2002-08-20
  • 打赏
  • 举报
回复
fflush的作用就是清空缓冲区
stdin代表标准输入缓冲区
Gpa 2002-08-19
  • 打赏
  • 举报
回复
多谢你~!

我想问一下fflush(stdin)
是什么函数,多谢你帮我解答
earthharp 2002-08-19
  • 打赏
  • 举报
回复
for(p=h,i=0;i<SIZE;p=p->next)这个loop结束条件是什么?
!!!!!!!
boodweb 2002-08-19
  • 打赏
  • 举报
回复
见"//ADDED"语句
for(i=0;i<SIZE;i++)
{
printf("please input num name score\n");
fflush(stdin);//ADDED
scanf("%d%s%3.2f",&p->num,p->name,&p->score);
p->averge=p->score/3;
p->next=(student *)malloc(sizeof(student));

p=p->next;//ADDED
}
输入问题是缓冲区问题(老问题了),fscanf不会除去缓冲区内输入的回车,导致累计
dcyu 2002-08-19
  • 打赏
  • 举报
回复
以前我有碰到过类似情况也是这样解决的。
dcyu 2002-08-19
  • 打赏
  • 举报
回复
加了i++,后面的问题解决了,至于前面的我认为是scanf()语句本身的问题。
你可以这样:
int a;
char b[10];
float c;

...
for(i=0;i<SIZE;i++)
{
printf("please input num name score\n");

scanf("%d%s%3.2f",&a,b,&c);
p->num=a; p->score=c;
strcpy(p->name,b);


...
}
...

winstarr 2002-08-19
  • 打赏
  • 举报
回复
可能是定义指针错了,
我帮你编译一下看!
Gpa 2002-08-19
  • 打赏
  • 举报
回复
#include <stdio.h>

#define SIZE 5

typedef struct student
{
int num;
char name[10];
float score;
float averge;
struct student *next;
}student;

void main()
{
FILE *fp;
student *h,*p;
int i;
if( (fp=fopen("stud.txt","w"))==NULL )
{
printf("Can't open the file");
exit(1);
}

h=p=(student *)malloc(sizeof(student));
for(i=0;i<SIZE;i++)
{
printf("please input num name score\n");
scanf("%d%s%3.2f",&p->num,p->name,&p->score);
p->averge=p->score/3;
p->next=(student *)malloc(sizeof(student));

}
p->next=NULL;

for(p=h,i=0;i<SIZE;i++,p=p->next)
fwrite(p,sizeof(student),1,fp);/*这里为什么p是指针不行*/
fclose(fp);
}
Gpa 2002-08-19
  • 打赏
  • 举报
回复
i<5啊~!

大家帮忙试试编译行不行
ashchan 2002-08-19
  • 打赏
  • 举报
回复
for(p=h,i=0;i<SIZE;p=p->next)这个loop结束条件是什么?
allenwu 2002-08-19
  • 打赏
  • 举报
回复
可能是换行把
不清楚
关注!
Gpa 2002-08-19
  • 打赏
  • 举报
回复
输入的问题是结构数组也一样这样,不知道什么原因了

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧