免費開始練習
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) 便是最合乎邏輯的判斷。

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題