【例2.7】假设有如下程序。
#include <stdio.h> void main () { char c1 ,c2 ,c3 ; int a ,b ,c ; scanf ("%d%d%d" ,&a ,&b ,&c ); scanf ("%c%c%c" ,&c1 ,&c2 ,&c3 ); printf ("%d ,%d ,%d" ,a ,b ,c ); printf ("%c ,%c ,%c" ,c1 ,c2 ,c3 ); }
当程序运行时,使用如下输入方式:
12 34 56 abc
将得到什么输出结果?
【分析】有人可能认为就是按照输入的样子输出两行信息,其实不然。第1行输入时,给变量a、b和c赋值。当回车时,这个回车被作为字符赋给变量c1,后面的字符ab分别赋给变量c2和c3,而输入的c变成多余的了。c1里是回车符,所以程序输出为
12 ,34 ,56 ,a ,b
如果输入“12 34 56abc”,则输出“12,34,56a,b,c”。这等效于如下输入方式:
12 34 56abc
由此可见,为scanf语句赋值时,也要具体问题具体分析,避免乱用回车键。