#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Link
{
int number;
char name[10];
char sex[4];
int Chinese;
int English;
int Math;
float average;
struct Link *next;
}Student;
void LoadStudent()
{
int flag=1;
char FileName[20];
Student *p;
FILE *fp;
printf("Please input file path:");
scanf("%s",FileName);
if((fp=fopen(FileName,"r+"))!=NULL)
{
fscanf(fp,"Number\tName\tSex\tChinese\tEnglish\tMath\tAverage\t\n");
printf("Number\tName\tSex\tChinese\tEnglish\tMath\tAverage\t\n");
while(flag)
{
p=(Student*)malloc(sizeof(Student));
fscanf(fp,"%d%s%s%d%d%d%f",&p->number,p->name,p->sex,&p->Chinese,&p->English,&p->Math,&p->average);
if(p->number==NULL)
flag=0;
else
{
printf("%d\t%s\t%s\t%d\t%d\t%d\t%0.2f\t\n",p->number,p->name,p->sex,p->Chinese,p->English,p->Math,p->average);
flag=1;
}
}
}
else
printf("Load failed!");
fclose(fp);
}
void main()
{
LoadStudent();
}
一个导入文件的小程序,运行有错误啊!求解决方法 在线等啊
答案:1 悬赏:80 手机版
解决时间 2021-03-04 11:59
- 提问者网友:蓝琪梦莎
- 2021-03-04 03:50
最佳答案
- 五星知识达人网友:举杯邀酒敬孤独
- 2021-03-04 05:00
你的程序会陷入死循环,因为当文件读完时,你想通过执行 if(p->number==NULL)
flag=0; 而让flag=0,从而结束循环,事实上却不是你所想象的那样,当文件读完时,p->number不会等于NULL,它读取的是野内存的值,也就是未知的内存,值是不确定的,多数情况下是负的。因为这里不能确定你文件里是否还有文件,也不能通过文件结尾来判断,所以我觉得可以在文件的末尾加一个标识,通过该标识来判断是否退出循环。
如文件内容为:
1 Jim man 90 80 70 80
2 Tim man 10 20 30 40
-1
那么读到文件结尾时,p->number=-1;可以通过这个来判断,从而退出循环。
修改后代码为:
if(p->number==-1) flag=0;
flag=0; 而让flag=0,从而结束循环,事实上却不是你所想象的那样,当文件读完时,p->number不会等于NULL,它读取的是野内存的值,也就是未知的内存,值是不确定的,多数情况下是负的。因为这里不能确定你文件里是否还有文件,也不能通过文件结尾来判断,所以我觉得可以在文件的末尾加一个标识,通过该标识来判断是否退出循环。
如文件内容为:
1 Jim man 90 80 70 80
2 Tim man 10 20 30 40
-1
那么读到文件结尾时,p->number=-1;可以通过这个来判断,从而退出循环。
修改后代码为:
if(p->number==-1) flag=0;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯