在例2.7中的語句
scanf ("%d%d%d" ,&a ,&b ,&c );
中,只要不在最後留有空格,都不影響數字輸入。如果要按格式輸入,可以在格式說明中給出,例如在語句
scanf ("%d%d%d" ,&a ,&b ,&c );
中,要求輸入數據用「,」隔開。對於字符而言,語句
scanf ("%c%c%c" ,&c1 ,&c2 ,&c3 );
則要求三個字符之間不能用空格隔開,但對於語句
scanf ("%c %c %c" ,&c1 ,&c2 ,&c3 );
而言,既可以連續輸入,也可以用空格隔開,即輸入
abc
和使用空格隔離的輸入
a b c (包括ab c 和a bc )
是等效的。最有意義的是:還可以用回車一個一個地輸入,即
a b c
但是在一行輸入時,第1個輸入不能留空格,即「abc」將會得到輸出「a,b」。
試想一想,下面的語句會出現何種現象?
scanf (" %c %c %c" ,&c1 ,&c2 ,&c3 );
這個語句非常有意義,它不僅能適應上述4種輸入形式,還可以有第5種方式,即可以先按回車,然後再使用4種方式的任意一種輸入。下面這個程序將體現它這個非常有用的特點。
【例2.8】分析下面的程序是否正確。
#include <stdio.h> void main () { char c1 ; for (;;){ printf (" 繼續則輸入Y :" ); scanf ("%c" ,&c1 ); if (c1 !='Y' ) break ; printf ("go on\n" ); } printf ("go out\n" ); }
【分析】程序語法沒有錯誤,能通過編譯,但運行結果有時正確有時錯誤,例如:
繼續則輸入Y : Y go on 繼續則輸入Y :go out
第2次詢問,不等用戶輸入就錯誤地結束循環,輸出go out。這就是這兩條語句相遇碰到的問題,但利用空格就能解決,即改為
scanf (" %c" ,&c1 );
能得到正確的結果。運行示例如下。
繼續則輸入Y :Y go on 繼續則輸入Y :Y go on 繼續則輸入Y :a go out
由此可見,用空格能很好地解決這個問題。