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

#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函数的双引号里的逗号就正确了。
错误提示如图

对于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

不可能输出两行

追问

scanf括号内没有逗号的话程序运行就正确了,为什么会这样

追答

格式串中尽可能少给冗余字符,如果有就必须严格按照输入,给使用带来不变。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-02-17
输入字符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。

本回答被提问者采纳
相似回答