编程 结构体 输入5个学生的各项信息 输出平均分和总分 我这个程序输出的结果不对 求解答 速度。。。

#include<stdio.h>structstudent{intnum;charname[20];intscore1;intscore2;intscore3;}stu... #include<stdio.h>
struct student
{
int num;
char name[20];
int score1;
int score2;
int score3;
}stu[5];
main()
{
int i;
int c;
for(i=0;i<5;i++)
{
scanf("%d,%s,%d,%d,%d\n",&stu[i].num,&stu[i].name,&stu[i].score1,&stu[i].score2,stu[i].score3);
}
for(i=0;i<5;i++)
{
c=f(stu[i].score1,stu[i].score2,stu[i].score3);
printf("%d,%s,%d,%d\n",stu[i].num,stu[i].name,c,c/3);
}
}
int f(int x,int y,int z)
{
int sum;
sum=x+y+z;
return (sum);
}
展开
 我来答
liuxinling_06
2011-12-28 · TA获得超过1289个赞
知道小有建树答主
回答量:345
采纳率:100%
帮助的人:424万
展开全部
这段代码问题就在于

scanf("%d,%s,%d,%d,%d\n",&stu[i].num,&stu[i].name,&stu[i].score1,&stu[i].score2,stu[i].score3);

经过调试,发现2个问题
第一个:stu[i].score3前面没&,应该是笔误,因为前面的都写了。
第二个:中间有个%s,这段代码的作者本意是输入“序号,名字,分数...” 中间用逗号隔开,而%s把后名字后面所有的输入都当成一个字符串存到name中去了。

问题解决:
方法1:改为
scanf("%d %s %d %d %d",&stu[i].num,&stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3);
但是这样修改会强制要求用空格作为分隔符,而不是逗号,能接受吗?

方法2:改为
scanf("%d,%[^,],%d,%d,%d",&stu[i].num,&stu[i].name,&stu[i].score1,&stu[i].score2,&stu[i].score3);
依然使用逗号作为分隔符,用scanf 扫描集%[^,]代替%s。
迷茫de求知者
2011-12-28 · 超过12用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:45万
展开全部
首先,main函数前面怎么没类型标识符(int main()或void main()才对);
其次,scanf用法写错了("%d,%s,%d,%d,%d....)中间这个逗号不该有的,连着写(“%d%s%d。。”);目前发现这么多,没有上机调试,你先改改吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深远且恬静的小百花
2011-12-28 · TA获得超过376个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:222万
展开全部
结构体定义应在主函数内
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式