现在还是有些困惑,一到题目??

来源:百度知道 编辑:UC知道 时间:2024/06/30 07:48:09
已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A,B,当从第一列开始输入数据时,正确的数据输入方式是:
int a1,a2; char c1,c2;
scanf("%d%d",&a1,&a2);
scanf("%c%c",&c1,&c2);
A) 1020AB<CR> B)10 20<CR>AB<CR>
C)10 20 AB<CR> D)10 20AB<CR>

答案是D 给解释一下 越详细越好!

c1c2是char型,所以按回车或空格都会被收入

a1a2正常输入(10空格20)正常情况按回车输入完毕,
不过这里不能按,回车会被c1收入.

所以紧接着按AB,这时候输入完毕,按回车结束.

D:OK

A) 1020AB<CR> //1020前面有空格?有的话立即出错退出输入,如果没有,1020->a1,'A'->a2出错退出
B)10 20<CR>AB<CR> //10->a1,20->a2,<CR>->c1,'A'->c2,'B'还在IO中,结果和题目不一致
C)10 20 AB<CR> //10->a1,20->a2,[空格]->c1,'A'->c2,'B'还在IO中,结果和题目还是不一致
D)10 20AB<CR> //10->a1,20->a2,'A'->c1,'B'->c2,OK

在%d时,可以跳过[空格]和\t等一些控制字符,而%c时,不会跳过任意字符,包括<CR>.所以上面读入了<CR>和[空格]...