2012-09-22 91 views
2

我對使用getchar()讀取用戶輸入的字符有疑問。需要關於getchar()和換行符的說明

char char1, char2; 
char1 = getchar(); 
char2 = getchar(); 

我需要得到2字符作爲來自用戶的輸入。在這種情況下,如果用戶輸入字符'A',然後輸入newline,然後輸入字符'B',那麼將存儲在char2中 - 將是換行符還是字符'B'

我在Windows上的CodeBlocks上試過它,char2實際上存儲了換行符,但我打算將它存儲爲字符'B'

我只想知道預期的行爲是什麼,以及它是否依賴於編譯器?如果是這樣,turbo C和mW會有什麼不同?

回答

4

是的,你必須每個輸入後消耗換行符:

char1 = getchar(); 
getchar(); // To consume `\n` 
char2 = getchar(); 
getchar(); // To consume `\n` 

這不是編譯器相關。對於所有平臺都是如此,因爲每條輸入行末尾都會有回車符(雖然實際換行符可能因平臺而異)。

0

我只是想知道預期的行爲是什麼,以及它是否依賴於編譯器相關?

這是預期的行爲,而不是編譯器相關的。

您可以使用scanf來讀取A,然後是換行符,然後是B,然後是換行符。如果你想堅持getchar(),那麼只需輸入AB即可。

0

在語句之間添加語句fflush(stdin);。 看這一個

ch1=getchar(); 

fflush(stdin); 
ch2=getchar(); 
+3

根據C標準,輸入流上的fflush()是未定義的行爲。它適用於Windows,至少在Visual Studio中,但應該避免使用,因爲它是非標準的。 –

0

可以防止它明確地測試閱讀換行。 而不是簡單地使用

getchar(): 

你可以使用這樣的事情

while((char1 = getchar()) == '\n'); 

如果你對你可能想測試「\ r」太多的窗口。所以代碼稍作修改。

while((char1 = getchar()) == '\n' || char1 == '\r');