web-dev-qa-db-ja.com

Visual Studio C/C++コンソールアプリケーションでコンソールウィンドウが閉じないようにする

答えが盲目的に明白であることは間違いないので、これはおそらく恥ずかしい質問です。

私は長年Visual Studioを使ってきましたが、これが私がコンソールアプリケーションの開発をしたのは今回が初めてです。

アプリケーションを実行すると、コンソールウィンドウがポップアップ表示され、プログラムの出力が表示された後、アプリケーションが終了するとウィンドウが閉じます。

出力を確認するまで開いたままにする方法と、ウィンドウを閉じた後に結果を表示する方法はありますか。

428
Martin

デバッグせずに実行すると(Ctrl + F5)、デフォルトではreturnキーを押してウィンドウを閉じるように促されます。デバッガを使いたい場合は、最後の行にブレークポイントを置くべきです。

437
Tom

プロジェクトを右クリック

プロパティ>設定プロパティ>リンカ>システム

SubSystemオプションで Console(/ SUBSYSTEM:CONSOLE) を選択するか、テキストフィールドに Console と入力するだけです。

今それを試してください...それは動作するはずです

207
Viraj

これがC/C++の方法です。

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

これをあなたのプログラムの一番上に置き、それがWindowsシステム(#ifdef _WIN32)上にある場合、それはWINPAUSEと呼ばれるマクロを作成するでしょう。プログラムを一時停止させたいときはいつでもWINPAUSE;を呼び出すとDOSコマンドを使ってプログラムを一時停止させます。 Unix/Linuxのような他のシステムでは、コンソールはプログラム終了でとにかく終了するべきではありません。

45
Shaun

Goto Debug Menu - > Press StartWithoutDebugging

26
pashaplus

.NETを使用している場合は、プログラムの最後にConsole.ReadLine()を付けます。

それは<ENTER>を待ちます。

22
Cheeso

(/ SUBSYSTEM:CONSOLE)は、私のvs2013では動作しませんでした(私はすでに持っていました)。

「デバッグなしで実行」はオプションではありません。デバッグと出力の表示を切り替えたくないからです。

で終わった

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

Qtcreator pre 2.6で使用されていたソリューション。今qtが成長している間、vsは別の方向に進んでいます。私が覚えているように、vs2008では我々はそのようなトリックを必要としませんでした。

12
fantastory

getchar()が戻る直前にmain()を呼び出そうとします。

12
Magarusu

これは、(1)コードの変更やブレークポイントを必要とせず、(2)プログラムの終了後にを一時停止するので、表示されたeverythingを確認できます。 F5またはCtrl + F5の後で一時停止します。主な欠点は、VS2013 Express(テスト済み)ではシンボルがロードされないため、デバッグが非常に制限されていることです。

  1. バッチファイルを作成します。私は私のrunthenpause.batを以下の内容で呼んだ。

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

    最初の行はあなたが提供したどんなコマンドでも8つまでの引数を実行します。 2行目は...一時停止します。

  2. プロジェクトのプロパティを開きます。構成プロパティデバッグ.

  3. "Command Arguments"を$(TargetPath)(または "Command"にあるものは何でも)に変更します。
  4. "Command"をrunthenpause.batへのフルパスに変更します。
  5. OKを押してください。

これで、実行するとrunthenpause.batがアプリケーションを起動し、アプリケーションが終了した後にコンソール出力を見るのを一時停止します。

シンボルをロードする方法を見つけたらアップデートを投稿します。私は this ごとに/Z7を試しましたが、成功しませんでした。

7
cxw

最後のコード行にしてください。

system("pause");
6
RefaelJan

CNTRL + F5を押すだけで外部コマンドラインウィンドウで開くことができます(Visual Studioでは制御できません)。

これでうまくいかない場合は、コードの最後に次のコードを追加してください。

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

これは、コードが最後に到達したら、キーを押して端末ウィンドウを閉じるのを待ちます。

これを複数の場所で行いたい場合は、上記のコードをメソッド(例:private void Pause())に入れて、プログラムが可能な限り終了するたびにPause()を呼び出します。

3
carefulnow1

を追加プロジェクトプロパティのデバッグセクションの下のコマンド引数ボックスで「一時停止」をクリックします。

3
theambient

Visual Studio 2017(15.9.4)以降、オプションがあります。

Tools->Options->Debugging->Automatically close the console

Visual Studioのドキュメントからの対応するフラグメント

デバッグが停止したときに自動的にコンソールを閉じる:

デバッグセッションの終了時にコンソールを閉じるようにVisual Studioに指示します。

3
chronoxor

あなたはコマンドプロンプトから実行ファイルを実行することができます。こうすればすべての出力を見ることができます。または、次のようにすることもできます。

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

こうすれば、a変数にデータを入力するまでウィンドウは閉じません。

3
Geo

私の場合、VS 2017コミュニティ版でEmpty C++プロジェクトを作成したときにこれを経験しました。構成のプロパティで、サブシステムを "コンソール(/ SUBSYSTEM:CONSOLE)"に設定する必要があります。

  1. [表示]に移動し、[プロパティマネージャ]を選択します。
  2. プロジェクト/ソリューションを右クリックして[プロパティ]を選択します。これにより、テストのプロパティページが開きます。
  3. リンカに移動してから[システム]を選択します。
  4. 「サブシステム」をクリックするとドロップダウンが表示されます。
  5. 「コンソール(/ SUBSYSTEM:CONSOLE)」を選択してください。
  6. 適用して保存
  7. 次に "CTRL + F5"を押してコードを実行すると、出力が表示されます。
2
Stephen Haruna

やや良い解決策:

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

あなたのプログラムの始めに。

長所:

  • std :: exit()を使用できます
  • mainから複数のリターンを持つことができます
  • あなたはデバッガの下であなたのプログラムを実行することができます
  • IDEに依存しない(cin.sync(); cin.ignore();の代わりにsystem("pause");のトリックを使用する場合は+ OSに依存しない)

短所:

  • コードを修正する必要があります
  • std :: terminate()で一時停止しません
  • iDE /デバッガセッション以外のプログラムではまだ発生します。あなたはWindowsの下でこれを防ぐことができます:

extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
    if (IsDebuggerPresent())
        atexit([] {system("PAUSE"); });
    ...
}
2
GhassanPL

どちらでも使えます:

  1. cin.get();

または

  1. system("pause");

main()関数の最後とreturnステートメントの前に必ずどちらかを作成してください。

2
AAEM

このオプションも使えます

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}
1