3 回答

TA貢獻1809條經(jīng)驗 獲得超8個贊
程序?qū)o法正常工作,因為在第1行,當用戶按Enter時,它將留在輸入緩沖區(qū)2字符中:Enter鍵(ASCII代碼13)和\n(ASCII代碼10)。因此,在第2行,它將讀取\n,而不會等待用戶輸入字符。
您在第2行看到的行為是正確的,但這不是完全正確的解釋。對于文本模式流,不管平臺使用什么行尾(無論是回車返回(0x0D)+linefeed(0x0A)、裸CR還是裸LF)。C運行時庫將為您處理這個問題:您的程序?qū)⒅豢吹?code>'\n'換新線路。
如果鍵入一個字符并按Enter鍵,則該輸入字符將按第1行讀取,然后'\n'
將由第2行讀取??匆?a >我在用scanf %c
讀取Y/N響應,但稍后將跳過輸入。
至于擬議的解決辦法,見(同樣來自于comp.lang.c FAQ):
如何才能刷新掛起的輸入,這樣用戶的打字機就不會在下一個提示符中讀?。繉⒁?code>fflush(stdin)工作?
如果
fflush
不會工作,我能用什么來沖洗輸入?
從根本上說,唯一的可移植方法是:
int?c;while?((c?=?getchar())?!=?'\n'?&&?c?!=?EOF)?{?}
你的getchar() != '\n'
循環(huán)工作,因為一旦您調(diào)用getchar()
,返回的字符已經(jīng)從輸入流中刪除。
另外,我覺得有義務勸阻你不要使用scanf
完全:為什么每個人都說不要用scanf
?我應該用什么代替?

TA貢獻1866條經(jīng)驗 獲得超5個贊
int ch;while ((ch = getchar()) != '\n' && ch != EOF) ;
'\n'
fflush()
- 3 回答
- 0 關(guān)注
- 694 瀏覽
添加回答
舉報