为什么选A呀?有人可以解释一下吗?

单选题

设有定义:int a,b; float x,y; ,则以下选项中对语句所作的注释叙述错误的是()。

A

scanf("%d%d%f", &a, &b); /* 多余的格式符%f完全不起作用 */

B

scanf("%d%d", &a, &b, &x); /* 多余的输入项不能获得输入数据 */

C

scanf("%d%f%d", &a, &b, &x); /* 输入项与格式符类型不匹配,变量b和x得不到正确的输入数据 */

D

scanf("Input:%d%d", &a, &b); /* 格式串中允许加入格式符以外的字符串 */

那就一项一项来呗
A
scanf("%d%d%f", &a, &b); /* 多余的格式符%f完全不起作用 */
不是不起作用,是你输入3个数,但是只有前2个数赋值给了a和b,但是如果你只输入2个数,程序依然处于阻塞状态不会往下走
B
scanf("%d%d", &a, &b, &x); /* 多余的输入项不能获得输入数据 */
变量x没有对应的输入项,不能获得赋值,你可以在控制台输入3个数据,但只有前2个会被读入,第三个会驻留在缓冲区里,直到再次调用scanf被读入(比如循环读)
C
scanf("%d%f%d", &a, &b, &x); /* 输入项与格式符类型不匹配,变量b和x得不到正确的输入数据 */
c语言比较古早,不智能,它不管你变量是什么类型,只看你使用什么符号来读,你告诉它按照float型读,它就把输入数据按照float型组成4个字节放进你提供的地址里,这个地址是&b,但是其实b是int型,这会造成数据全乱码了
D
scanf("Input:%d%d", &a, &b); /* 格式串中允许加入格式符以外的字符串 */
Input:部分是直接输出的,不格式化,这当然是允许的

不是不起作用把,你照样也要输入三次,只不过最后一次没给变量而已吧。