#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>我不是严格按照控制串输入了吗?
追答你的代码与输出内容明显不符。因为满足
if(student1.score < student2.score)所以输出是
10101,wang,89
不可能输出两行
追问scanf括号内没有逗号的话程序运行就正确了,为什么会这样
追答格式串中尽可能少给冗余字符,如果有就必须严格按照输入,给使用带来不变。