首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言程式跑完視窗一閃即關:getchar() 殘留換行符導致、解決方案與最佳實踐

     編輯:C 語言問答

現象

程式輸入資料、計算、輸出結果後,主控台視窗**瞬間閃過**,來不及看結果。

根本原因

  • scanf("%f%f", &a, &b) 讀取數字後,**換行符 \n 留在標準輸入緩衝區**。
  • 後續 getchar() 直接讀走這個殘留 \n,不等使用者按鍵,程式結束,視窗關閉。

解決方案 (按推薦順序)

方案 1:雙重 getchar() (最簡單)


printf("結果: %.2f\n", a*b);
getchar(); // 吃掉殘留 \n
getchar(); // 真正等待使用者按鍵
return 0;

方案 2:清空輸入緩衝區再 getchar() (較穩健)


int ch;
while ((ch = getchar()) != '\n' && ch != EOF); // 清空緩衝區至換行或 EOF
getchar(); // 等待按鍵

方案 3:用 system("pause") (僅 Windows、不攜帶)


#ifdef _WIN32
    system("pause");
#else
    printf("Press Enter to continue...");
    getchar();
#endif

方案 4:IDE/終端機設定「執行後保持開啟」 (根治)

  • **VS Code**:launch.json 加 "console": "integratedTerminal",或 Code Runner 設定 "code-runner.runInTerminal": true。
  • **CLion / Visual Studio**:預設 Debug 會停在斷點/結束處,或專案屬性 → 連結器 → 系統 → 子系統:主控台 (/SUBSYSTEM:CONSOLE)。
  • **命令列直接跑**:gcc main.c -o main && ./main (Linux/macOS) / main.exe (Windows cmd/PowerShell) — 視窗不會自動關閉。

原始代碼修正版


#include 

int main(void) {
    float a, b;
    printf("輸入長方形的長、寬:");
    if (scanf("%f %f", &a, &b) != 2) return 1;

    while (a <= 0 || b <= 0) {
        printf("錯誤!重新輸入:");
        while (getchar() != '\n'); // 清空錯誤輸入行
        if (scanf("%f %f", &a, &b) != 2) return 1;
    }

    printf("面積 = %.2f\n", a * b);

    // 方案 2:清空緩衝區再等待
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
    printf("按 Enter 鍵結束...");
    getchar();
    return 0;
}

避坑提醒

  • fflush(stdin) **未定義行為 (C 標準不支援)**,僅 MSVC 擴充支援,**嚴禁使用**。
  • scanf 返回值**必須檢查**,輸入非數字時不會消耗緩衝區,導致無限迴圈。
  • **養成在終端機手動執行**習慣,而非依賴 IDE 「一鍵跑」產生的臨時視窗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved