【例2.6】程序中的scanf函數含有空格,是否能通過編譯?請分析運行結果。
#include<stdio.h> void main ( ) { int x ,y ,z ; scanf ( "%d%d%d " , &x , &y , &z ); printf ( "%d , %d ,%d\n" , x , y , z ); }
【分析】在最後一個「%d」和「"」之間留有空格的語句
scanf ( "%d%d%d " , &x , &y , &z );
與沒有留空格的語句
scanf ("%d%d%d" , &x , &y , &z );
的功能是不一樣的。前者在「%d」後面有空格,雖然能通過編譯,但運行時的結果不一樣。至於是留一個還是多個空格,結果卻是一樣的。含有空格的程序,在輸入三個數據並按回車後,程序絲毫沒有反應。再輸入一個數據,才能繼續運行並輸出前三個數據。例如輸入數據「1 2 3 4」,則輸出「1,2,3」。語句
scanf ( " %d %d %d" , &x , &y , &z );
是在格式說明符中間和前面有空格,這種情況能得到正確結果。由此可見,最後一個%d與雙引號之間不能有空格。