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

如下是学生管理系统中显示部分的代码,运行之后出错,大家帮忙啊
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 才是判断句
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-02-13
if语句括号里面应该是(ss == NULL)!

其它的没看出有什么毛病!
第2个回答  2009-02-13
这么做:

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",p->num,p->name,p->age,p->score);
p++;
n--;
}
fclose(ss);
}
第3个回答  2009-02-13
fscanf那里有问题,应该有&符号的,取地址要
第4个回答  2009-02-13
54行是哪一行?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网