关于c语言的scanf函数的逗号问题!!

#include<stdio.h>intmain(){structstudent{intnum;charname[20];floatscore;}student1,stu... #include<stdio.h>
int main()
{

struct student
{int num;char name[20];float score;

}student1,student2;
scanf("%d,%s,%f",&student1.num,student1.name,&student1.score);
scanf("%d,%s,%f",&student2.num,student2.name,&student2.score);
if(student1.score>student2.score)
printf("%d,%s,%f\n",student1.num,student1.name,student1.score);
else if(student1.score<student2.score)
printf("%d,%s,%f\n",student2.num,student2.name,student2.score);
else
{printf("%d,%s,%f\n",student1.num,student1.name,student1.score);
printf("%d,%s,%f\n",student2.num,student2.name,student2.score);

}
return 0;
}这程序运行后结果与预想的不同,
如果去掉scanf函数的双引号里的逗号就正确了。
错误提示如图
展开
 我来答
xoaxa
2015-02-17 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3503万
展开全部

对于scanf()函数,如果格式控制串里有逗号(或其他非格式符号),键盘输入时,必须严格按照控制串的内容键入,不能随意输入。如scanf("a=%d,b=%d",&a,&b);响应输入是a=xx,b=xx(xx是整形数)。scanf()函数还有一个特点较为常用,该函数会将白字符(空格、<Tab>、<Enter>)作为数据间的分隔符,比如scanf("%d%s%d",&a,str,&b);,响应输入是:12 asder334 35,此后,12赋给a,"asder334 "拷贝到str数组,35赋给b,且各个数据之间的空白符可以是一个,也可以是多个。

#include <stdio.h>
int main() {
struct student {
int num;
char name[20];
float score;
}student1,student2;
scanf("%d%s%f",&student1.num,student1.name,&student1.score);
scanf("%d%s%f",&student2.num,student2.name,&student2.score);
if(student1.score > student2.score)
printf("%d,%s,%f\n",student1.num,student1.name,student1.score);
else if(student1.score < student2.score)
printf("%d,%s,%f\n",student2.num,student2.name,student2.score);
else {
printf("%d,%s,%f\n",student1.num,student1.name,student1.score);
printf("%d,%s,%f\n",student2.num,student2.name,student2.score);
}
return 0;
}
更多追问追答
追问
我不是严格按照控制串输入了吗?
追答

你的代码与输出内容明显不符。因为满足

if(student1.score < student2.score)
    printf("%d,%s,%f\n",student2.num,student2.name,student2.score);

所以输出是

10101,wang,89

不可能输出两行

saxziljj
2015-02-17 · TA获得超过106个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:122万
展开全部
输入字符wang,89时候这整个应该被默认为字符串存入了student1.name
追问
什么意思,能详细点不?谢谢!
追答
scanf("%d,%s,%f",&student1.num,student1.name,&student1.score);
你的这条语句输入时,你输入的10101,wang,89+回车;所以student1.num里面是10101,而student1.name是wang,89+回车,这个全部存在字符串里面,然此时你的控制字符串要求输入一个逗号,你输入的是数字,所以student1.score没有存放内容,应该为0。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式