讀古今文學網 > C語言解惑 > 2.5 回車鍵打亂scanf的陣腳 >

2.5 回車鍵打亂scanf的陣腳

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