防止在Visual Studio C / C ++控制台應用程序上關閉控制台窗口



7 Answers

右鍵點擊你的項目

屬性>配置屬性>鏈接器>系統

SubSystem選項中選擇控制台(/ SUBSYSTEM:CONSOLE)。

現在嘗試一下......它應該可以工作

Question

這可能是一個尷尬的問題,毫無疑問,答案是非常明顯的。

我已經使用了Visual Studio多年,但這是我第一次完成任何'控制台應用程序'開發。

當我運行我的應用程序時,彈出控制台窗口,出現程序輸出,然後在應用程序退出時關閉窗口。

有沒有辦法讓它保持打開狀態,直到我檢查了輸出,或者在窗口關閉後查看結果?




只是作為你的最後一行代碼:

system("pause");



轉到調試菜單 - > StartWithoutDebugging




這是一個解決方案,(1)不需要任何代碼更改或斷點,(2) 程序終止後暫停以便您可以看到打印的所有內容 。 它會在F5或Ctrl + F5之後暫停。 主要的缺點是在VS2013 Express上(經測試),它不加載符號,因此調試非常有限。

  1. 創建一個批處理文件。 我打電話給我的runthenpause.bat ,內容如下:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

    第一行將運行您提供的任何命令和最多八個參數。 第二行將...暫停。

  2. 打開項目屬性| 配置屬性| 調試。

  3. 將“命令參數”更改為$(TargetPath) (或“Command”中的任何內容)。
  4. 將“Command”更改為runthenpause.bat的完整路徑。
  5. 點擊確定。

現在,當您運行時, runthenpause.bat將啟動您的應用程序,並且在您的應用程序終止後,將暫停您以查看控制台輸出。

我會發布一個更新,如果我找出如何獲取符號加載。 我試過/Z7 ,但沒有成功。




嘗試在main()返回之前調用getchar()




添加“| 暫停“在項目屬性的調試部分下的命令參數框中。




使用console.readline 。 你們正在寫作,但沒有閱讀它。




一個更好的解決方案:

atexit([] { system("PAUSE"); });

在你的節目開始時。

優點:

  • 可以使用std :: exit()
  • 可以從main獲得多個回報
  • 你可以在調試器下運行你的程序
  • 獨立於IDE(如果使用cin.sync(); cin.ignore();則獨立於+ OS cin.sync(); cin.ignore();而非system("pause");system("pause");

缺點:

  • 必須修改代碼
  • 不會在std :: terminate()上暫停
  • 仍然會在IDE /調試器會話之外的程序中發生; 你可以使用下面的方法來阻止這個:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}



Related