【例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語句賦值時,也要具體問題具體分析,避免亂用回車鍵。