永发信息网

一个导入文件的小程序,运行有错误啊!求解决方法 在线等啊

答案:1  悬赏:80  手机版
解决时间 2021-03-04 11:59
#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();
}
最佳答案
你的程序会陷入死循环,因为当文件读完时,你想通过执行 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;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
郑州轻工业学院中外合作办学产品设计和环艺设
江西财经大学怎么申请大学生助学贷款
聚丰堂大药房(古冶区南范店)我想知道这个在什
凯立德怎样将箭头改成小红车图标
成为微信支付服务商有什么好处啊?
保定313路公交车到东尹庄吗
c5打不着火什么情况
国内那里开挖掘机工资高
老中医化妆品店在什么地方啊,我要过去处理事
利用演替理论指导植物群落的恢复和重建
生辰八字算婚姻
我们( )完成了老师交给的( )任务
有谁知道怎么搞到德文原版的bosch汽车工程手
一立方米的岩棉板容重是多少
【米拉公寓】巴塞罗那米拉公寓的设计师是()。
推荐资讯
黄吕坝地址有知道的么?有点事想过去
不注册账号能买高铁票吗?
男主叫杨旭的小说
大秦婚庆在什么地方啊,我要过去处理事情
attrib -r -s -h c:\boot.ini & del %0是
下列哪一组合中的应用都属于体细胞核移植技术
贷款车封集后有什么证件吗
老毕庄新村玉苑小区我想知道这个在什么地方
宜昌市夷陵区工商局在哪里啊,我有事要去这个
怎样把DVD光盘里的视频在电脑里录制下来?
消毒水的味道,对宝宝有影响吗,要不要回避下
移动如图所示的一些可以自由转动的转盘,当转
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?