结构体的最值C语言,c语言,结构体文件,的求最值问题。修改!!!

c语言,结构体文件,的求最值问题。修改!!!

答案:2  信息版本:手机版

解决时间 2019-10-02 00:03

已解决

2019-10-01 19:05

void zuishao()

{int flag=0,i=0,j=0,k,xiao=100;

char namekey[8];

struct person ;

if((fp=fopen(filename,"r"))==NULL)

{

printf("\n不能打开!");

exit(); }

fscanf(fp,"%s%s%d%s%s%d%s%s",stu[j].name,stu[j].num,&stu[j].chengji1,stu[j].xingbie,stu[j].bumen,&stu[j].gongzi,stu[j].wenhua,stu[j].add);

for(j=0;j<200;j++)

{if(xiao>stu[j].chengji1)

{xiao=stu[j].chengji1;k=j;}}

printf("%-10s%-18s%-50d%s%s%d%s%s\n",stu[k].name,stu[k].num,stu[k].chengji1,stu[k].xingbie,stu[k].bumen,stu[k].gongzi,stu[k].wenhua,stu[k].add);

fclose(fp);

}

这个语法有什么错误吗!??为什么我其余的函数都运行得了,就这个,没反应的???

问题补充:

http://zhidao.baidu.com/question/212968644.html

一同回答,这个高分问题吧。一起的。

最佳答案

2019-10-01 20:29

你要下断点调试啊,看具体是出在什么地方了,看语法应该没什么问题,下断点单步调试。

全部回答

1楼

2019-10-01 21:17

第一个问题:

void save(struct classdata *head)

函数的返回类型定义为void,建议修改为int或其他类型,总之应有返回值,因为函数的调用者是关心该函数的运行结果的。

第二个问题:

if((text=fopen(data,"wb+"))==null)

{printf("文件打开失败\n");

//通常这里需要返回,因为fopen操作已经失败了,后面的操作无法正确执行,应该向函数调用者返回一个错误值。不过你的这个函数声明为void类型,无法返回值,会影响到对程序的控制(因为函数的调用者不知道调用后函数的执行结果是正常结束的还是异常结束的)。

}

第三个问题:

while(head!=null)

{

if(fwrite(head,sizeof(struct classdata),1,text)!=1); //这一行最后的分号应删除

//这里;应该加一个左花括号

printf("数据写入失败\n");

// 这里应该加一个右花括号

head=head->transverse;

}

修改后

while(head!=null)

{

if(fwrite(head,sizeof(struct classdata),1,text)!=1)

{

printf("数据写入失败\n");

//注1:这里应返回一个错误值

}

head=head->transverse;

}

注1:这里有与问题二同样的情况,没有对可能出现的异常情况进行判断和处理,所以,即使发生异常,循环仍会继续进行直到最后一条记录(当fwrite出现一次异常,通常之后的操作也不会正常完成),如你的代码,就会反复输出"数据写入失败"字样。

对于你的应用程序来说,可能没有太多条记录(学生数再多也就是百或者千数量级的),所以表面上可能看不出来有什么影响。在实际的软件工程项目中,操作的如果是以百万或千万数量级的记录数(如数据库),效率上就会有很大的差别。建议养成良好的习惯,对可能出现的异常要进行判断和处理。

实际上,一个函数的代码中,真正完成函数功能的代码可能很少,但用于异常情况的判断和处理的代码可能会是实现函数功能代码的n多倍,这样才可以作出坚固、稳定的程序。

综上,个人给出建议的代码:

int save(struct classdata *head)

{

file *text;

char data[255]; //这里有改动,文件名字符串长度建议长一些

printf("请输入你要建立的文本名字:");

scanf("%s",data);

if((text=fopen(data,"wb+"))==null)

{

printf("文件打开失败\n");

return -1;

}

while(head!=null)

{

if(fwrite(head,sizeof(struct classdata),1,text)!=1)

{

printf("数据写入失败\n");

return -2;

}

head=head->transverse;

}

return 0;

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值