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


464

答えが間違いなく明白であるので、これはおそらく大げさな質問です。

Visual Studioを何年も使用していますが、「コンソールアプリケーション」の開発を行ったのはこれが初めてです。

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

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


Monodevelopはあなたが期待していることをします。
ctrl-alt-delor 2016

3
以下に回答が多すぎるので、ここに回答をコピーします。VS2017を使用している場合は、[ツール]-> [オプション]-> [デバッグ]-> [コンソールを自動的に閉じる]
jw_

同意した。VS 2017以降のベストアンサーはクロノクサーの答えだと思います。
すべてのRage

回答:


466

デバッグなしで実行すると(Ctrl + F5)、デフォルトでは、Enterキーを押してウィンドウを閉じるように求められます。デバッガーを使用する場合は、最終行にブレークポイントを配置する必要があります。


268
C ++アプリを実行していて、デバッグなしで実行してもコンソールウィンドウが閉じる場合は、[構成プロパティ]、[リンカー]、[システム]でサブシステムをコンソールに明示的に設定する必要があります。これは、サブシステムが設定されていない空のプロジェクトで開始した場合に発生する可能性があります。
Trevor Robinson


40
正しい答えは@TrevorRobinsonによるものです。構成プロパティがどこにあるかを見つけるのに問題がある場合の展開バージョンは次のとおりです。VisualStudioでプロジェクトを右クリック>プロパティ>構成プロパティ>リンカー>システム、サブシステムを「コンソール」
PlagueHammer 2014年

3
トレバー・ロビンソンは正しいです。空のプロジェクトを開始した場合、C ++アイテム。[表示]-> [プロパティマネージャ]-> [プロパティ(レンチアイコン)]-> [構成]に移動する必要があります。プロパティ->リンカ->システム->サブシステム->ポップアップメニューで、[コンソール]を選択します。
最も名誉ある

10
私はVSコミュニティ2017でctrl+f5作業しています。機能していません。Propertiesプロジェクトを右クリックしても、wrench iconグレー表示されます。
ケタン

232

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

プロパティ>構成プロパティ>リンカー>システム

選択:コンソール(CONSOLE / SUBSYSTEM)の中にSubSystemオプションまたはあなただけ入力することができますコンソールをテキストフィールドに!

今それを試してください...それはうまくいくはずです


これは私のVS2013 Expressでは機能しましたが、受け入れられた回答は機能しませんでした。非常に奇妙です。受け入れられた答えは、過去に使用したすべてのVisual Studioバージョンで機能しました。
Michael Calvin

9
@MichaelCalvinこれを設定した後、Ctrl + F5で実行する必要があります。それがキッカーです。
Jonathan Mee

@JonathanMeeがまだCtrl + F5を実行していると述べたように。これは私のビジュアルスタジオ2015で既に設定されているため、最初の答えが最も役に立ったものでした。

これは確かに正しいです。CTRL+F5たとえば、新しいC ++ファイルを空のプロジェクトに追加すると、使い慣れたものは失敗します。
user2023370

Visual Studio Express 2015で私のために働いた。ありがとう。
LHC

44

C / C ++の方法は次のとおりです。

#include <stdlib.h>

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

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


このメソッドはVisual C ++では機能しません(ヘッダーを含めない限り)
wmac

2
@wmac windows.hヘッダーをインクルードする必要があります
Geowil

1
ライブラリや名前空間は含めませんでしたが、正しく動作しました。ありがとうございました。
HalilİbrahimOymacı2016年

1
しないでください。pauseコマンドは、Windows固有です。
firegurafiku 2016

Visual Studio 2013 Expressで私のために働いた。:)
Anirban 2016年

32

後藤デバッグメニュー- > プレス StartWithoutDebugging


C#開発環境を選択しない限り、これはVS 2008のオプションでさえありません。CTRL + F5でも機能します。これをボタンとしてツールバーの[ツール]> [カスタマイズ]から追加することもできます。
ペリー

複数のプロジェクトがある場合、関連するプロジェクトをスタートアッププロジェクトとして設定します
CADは、2015年

27

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

お待ちしており<ENTER>ます。


9
+1-どちらか、またはConsole.ReadKey()任意のキーを待つだけ。
FredrikMörk、

奇妙なことに、これは私のアプリでは効果がありません。ユーザーの入力を待たずに閉じます。
Kokodoko、2015年

4
その後、コードはそのポイントに到達する前に終了する可能性があります。
実際、

20

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

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

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

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

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


2
これをVS2017とVS2019でテストしました。サブシステムをCONSOLEに設定し、このオプションをオフにする必要があります。どちらか一方、またはどちらもない場合、ウィンドウは自動的に閉じます。
Casey

同じソリューションから複数のプロジェクトを起動すると、ウィンドウが閉じます。
セルジュロガッチ

これがVS 2017以降の正解だと思います。残念ながら古いバージョンにはありません。
すべてのRage

13

戻るgetchar()直前に呼び出してみてくださいmain()


単純なHello NameコンソールアプリのVS 2008では機能しません。cout、cin、cout、getchar()、コンソールはまだ閉じます。どうしたんだ?
ペリー

1
getchar()の直前にcoutがある場合は、getchar()を2回入れてみてください。getchar()はcharを期待し、すでにcoutでそれを与えています...これが役立つかどうか私に知らせてください:)
Magarusu

12

(/ SUBSYSTEM:CONSOLE)は、vs2013では機能しませんでした(既に持っていました)。

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

私は終わりました

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

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


7

これは、(1)コードの変更やブレークポイントを必要としないソリューションであり、(2)プログラムの終了後に一時停止して印刷されたすべての内容を確認できます。F5キーまたはCtrl + F5キーを押すと一時停止します。主な欠点は、VS2013 Express(テスト済み)ではシンボルが読み込まれないため、デバッグが非常に制限されることです。

  1. バッチファイルを作成します。私runthenpause.batは次の内容でmineを呼び出しました。

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

    1行目は、指定したコマンドと最大8つの引数を実行します。2行目は...一時停止します。

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

  3. 「コマンド引数」を次のように変更します $(TargetPath)(または「コマンド」にあるもの)に変更します。
  4. 「コマンド」をフルパスに変更します runthenpause.batます。
  5. OKを押します。

さて、あなたが走ると、 runthenpause.batするとアプリケーションが起動し、アプリケーションが終了すると一時停止してコンソール出力が表示されます。

シンボルをロードする方法がわかればアップデートを投稿します。私が試した/Z7あたりに、このしかし、成功せず。


1
これはまだデバッグをサポートしていませんが、他のすべての回答とは対照的に、少なくともVLDなどの出力を表示できない問題に対処しています。
マーティンヘニングス2017


3

コマンドプロンプトから実行可能ファイルを実行できます。これにより、すべての出力を確認できます。または、次のようにすることもできます。

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

return YOUR_MAIN_CODE;

この方法では、a変数のデータを入力するまでウィンドウは閉じません。


3

「| プロジェクトプロパティのデバッグセクションの下にあるコマンド引数ボックスの[一時停止]をクリックします。


4
これが機能した場合、これは優れたソリューションになります。 pauseはバッチファイルでのみ機能するように見え、STDINでプログラムから入力を受け取りますが、そのテキストは再印刷しません。で置き換え|てみましたが&&、効果がありませんでした。おそらく、コマンドシェル(cmd.exe)で実行していないためです。
ブライアンヴァンデンバーグ

3

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

これが機能しない場合は、コードの最後に次を追加します。

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

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

これを複数の場所で実行する場合は、上記のコードをメソッド(などprivate void Pause())に挿入しPause()、プログラムが終了する可能性がある場合は必ず呼び出します。


cntrl + f5を実行すると、開いてすぐに閉じますか?どのように修正しますか?
Callat

第二の解決策は私が探していたものでした!
RoG 2017年

Ctrl + F5を押しても何も起こりません。以前は機能していましたが、突然、機能しなくなりました。
ナターシャ

2

やや良い解決策:

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

プログラムの始めに。

長所:

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

短所:

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

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

非常に悪いアドバイス。
乾杯とhth。-アルフ

なぜ詳しく説明できますか?
GhassanPL 2018年

デバッグしていない場合は、何も問題はありません。この場合、解決すべき問題はないからです。VSではCtrl + F5でプログラムを実行するだけで、VSに問題はなく、コマンドインタープリターには問題がありません。つまり、問題はありません。また、デバッグ中に停止したい追加コードを停止したい場合は、ブレークポイントよりも便利なソリューションではなく、停止したくない状況で干渉します。
乾杯とhth。-アルフ

2

どちらかを使用:

  1. cin.get();

または

  1. system("pause");

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


2

このオプションを使用することもできます

#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;
}

2

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

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

0

Visual Studio 2015インポートあり。コード例が必要なインポートを提供しないとき、私は嫌いです。

#include <iostream>;

int main()
{
    getchar();
    return 0;
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.