快来帮帮忙~!~!~文件那章的问题 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);
}
这里输入时还有一个问题,只可以输两个之后不行了,不会是我的编译器问题吧?
...全文
3 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
输入的问题是结构数组也一样这样,不知道什么原因了
回复
发动态
发帖子
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告