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

VS2013 C++ 控制台程式閃退:cin.get() 讀取殘留換行符導致

     編輯:程式設計綜合問答

問題現象

Visual Studio 2013 建立空專案編寫 C++ 控制台程式,執行後控制台視窗一閃而過,無法看到輸出結果。程式碼使用 cin.get() 嘗試暫停,但無效果。

根因分析

int main() {
    int lang;
    cout << "請為lang輸入一個數字:";
    cin >> lang;          // ① 輸入數字並按 Enter,緩衝區殘留 '\n'
    cout << ma(lang);
    cin.get();            // ② 直接讀取殘留的 '\n',不阻塞,程式結束
    return 0;
}

cin >> lang 讀取整數後,輸入緩衝區仍保留換行符 '\n'。隨後 cin.get() 讀取單字元時,直接消費該換行符並返回,不會等待使用者新輸入,導致程式立即退出。

解決方案

方案一:雙重 cin.get()(最簡單)

cin >> lang;
cout << ma(lang);
cin.get();  // 讀取殘留 '\n'
cin.get();  // 真正等待使用者按鍵
return 0;

方案一:cin.ignore() 清空緩衝區(推薦)

#include   // 需包含此頭檔
cin >> lang;
cout << ma(lang);
cin.ignore(numeric_limits::max(), '\n'); // 忽略至換行符
cin.get();  // 等待按鍵
return 0;

方案三:system("pause")(Windows 專用,不推薦跨平台)

system("pause");
return 0;

方案四:Visual Studio 專案屬性設置(不修改程式碼)

  1. 專案右鍵 Properties(屬性)
  2. Linker(連結器) → System(系統) → SubSystem(子系統) 選擇 Console (/SUBSYSTEM:CONSOLE)
  3. Debugging(偵錯) → Command Arguments 留空
  4. 啟動專案時使用 Ctrl+F5(Start Without Debugging),VS 會自動在結束時顯示「請按任意鍵繼續...」

最佳實踐建議

  • 養成使用 cin.ignore() 清理緩衝區的習慣,避免後續 getline()、cin.get() 讀取異常
  • 調試時善用中斷點(F9)與 Locals/Watch 視窗,觀察變數值與緩衝區狀態
  • 跨平台專案優先使用標準 C++ 方案(方案二),避免依賴 system()

採用方案二修改程式碼後,控制台將正確暫停等待使用者按鍵,解決閃退問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved