讀古今文學網 > C語言解惑 > 2.4 空格讓scanf莫名其妙 >

2.4 空格讓scanf莫名其妙

【例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與雙引號之間不能有空格。