2016-05-17 56 views
0

爲什麼當我在scanf()格式說明符之前使用空格時,程序工作正常。下面的代碼:程序在scanf()中格式化字符串和字符轉換之前沒有空格退出

printf("What's your username: "); 
scanf(" %s", username); 

printf("Do you want to make a deposit or a withdrawal? [d/w]\n"); 
scanf(" %c", &choice); 

當我沒有像下面這段代碼的空間,它退出:

printf("What's your username: "); 
scanf("%s", username); 

printf("Do you want to make a deposit or a withdrawal? [d/w]\n"); 
scanf("%c", &choice); 

是否有一個很好的解釋這個?

+1

我已經看到至少有一個評分問題歸結爲這個問題。這是否已經有一個很好的規範問題? –

回答

5

是的,有一個很好的解釋,並且解釋是當您嘗試讀取第二個輸入的字符時,您爲第一個輸入輸入的換行符仍然在緩衝區中。使用格式讀取單個字符將讀取輸入緩衝區中的第一個字符,而不管它是什麼。

通過添加前導空格,您可以告訴scanf讀取並丟棄所有前導空格。

大多數格式都會自動執行此操作,例如"%s"格式,因此您不需要格式字符串中的前導空格。閱讀例如this scanf (and family) reference瞭解更多信息,以及您需要明確跳過前導空格的格式。

1

發生這種情況是因爲scanf跳過了空白區域當它讀取整數或char等數據時。空格字符是那些影響屏幕上字符間距和格式的字符,不會打印任何可見的字符。您可以鍵入作爲用戶的空格字符是空格(空格鍵),製表符(Tab鍵)和換行符(Enter鍵)。參考鏈接here

相關問題