一段简单的C语言代码,大家帮忙挑错

来源:百度知道 编辑:UC知道 时间:2024/05/30 01:21:34
如下是学生管理系统中显示部分的代码,运行之后出错,大家帮忙啊
void xianshi(struct student * p,int n)
{
FILE * ss=NULL;

ss=fopen("c:\\student system\\sys.dat","r");
if(ss=NULL) { printf("文件不存在"); return; }

system("cls");
printf("学号 姓名 年龄 成绩\n");
while(n>0)
{
fscanf(ss,"%s\t%s\t%s\t%s",p->num,p->name,p->age,p->score);
printf("%s\t%s\t%s\t%s\n",p->num,p->name,p->age,p->score);
p++;
n--;
}
fclose(ss);
}

释义:
Debug Assertion Failure => fscanf.c stream!=NULL
调试断言错误,scanf.c的第54行一定是 Assert(stream!=NULL),
即“断言stream不为空”。断言是程序员故意加上去的,目的是提醒后来者注意:使用fscanf函数时stream参数不能为空。

原因:
if(ss=NULL) { printf("文件不存在"); return; } =>
这一句有“笔误”,意外将ss赋成空了,改成 ss==NULL 才是判断句

if语句括号里面应该是(ss == NULL)!

其它的没看出有什么毛病!

这么做:

void xianshi(struct student * p,int n)
{
FILE * ss=NULL;

ss=fopen("c:\\student system\\sys.dat","r");
if(ss==NULL) { printf("文件不存在"); return; } //应该是==

system("cls");
printf("学号 姓名 年龄 成绩\n");
while(n>0)
{
if(p==NULL) break; //判断p是否为空
if(p->num==NULL||p->name==NULL||p->age==NULL||p->score==NULL) break; //判断数值是否有效
fscanf(ss,"%s\t%s\t%s\t%s",p->num,p->name,p->age,p->score);
printf("%s\t%s\t%s\t%s\n&q