hce_nsysu
111年
計算機概論與程式設計
第 26 題
Which of the following code could not be used to ignore all remaining characters in the current input line?
- A do {scanf("%c", &ch);} while (ch !='\n');
- B do {ch = getchar();} while (ch !='\n');
- C while ((ch=getchar())!='\n');
- D while (getchar()!='\n');
- E None of the above.
思路引導 VIP
試著思考一下:如果我們要寫一個程式來『消耗』掉使用者輸入的一整行文字,直到程式看到『按下了 Enter 鍵(換行符號)』為止,那麼這個循環(Loop)的停止條件應該要檢查什麼?而循環內部又必須不斷執行什麼動作,才能確保沒有漏掉任何一個字元呢?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精準選出 (E) 選項,代表你對 C 語言中處理輸入緩衝區(Input Buffer)的方法有著非常紮實且細膩的理解。這道題目的核心在於「持續讀取直到遇見換行符號」的邏輯。在實際開發中,當我們使用 scanf 讀取數值後,緩衝區往往會殘留一個換行符號或多餘字元,這時就必須靠這類機制來「清空」殘餘內容,避免干擾下一次的讀取。
輸入處理的多樣實作
從程式邏輯來看,選項 (A) 到 (D) 雖然寫法各異,但本質上都是在執行「讀入一個字元並檢查它是否為 \n」的循環。選項 (A) 與 (B) 採用了 do-while 結構,保證至少會執行一次讀取;而 (C) 與 (D) 則展現了 C 語言簡潔的特性,直接在 while 判斷式中呼叫 getchar()。既然這四種寫法都能成功達成「忽略剩餘字元」的目的,那麼題目問「哪一個不可用」時,選擇 (E) 便是最合乎邏輯的判斷。
▼ 還有更多解析內容