答えが間違いなく明白であるので、これはおそらく大げさな質問です。
Visual Studioを何年も使用していますが、「コンソールアプリケーション」の開発を行ったのはこれが初めてです。
アプリケーションを実行すると、コンソールウィンドウがポップアップし、プログラムの出力が表示され、アプリケーションが終了するとウィンドウが閉じます。
出力を確認するまで開いたままにする方法、またはウィンドウが閉じた後に結果を表示する方法はありますか?
答えが間違いなく明白であるので、これはおそらく大げさな質問です。
Visual Studioを何年も使用していますが、「コンソールアプリケーション」の開発を行ったのはこれが初めてです。
アプリケーションを実行すると、コンソールウィンドウがポップアップし、プログラムの出力が表示され、アプリケーションが終了するとウィンドウが閉じます。
出力を確認するまで開いたままにする方法、またはウィンドウが閉じた後に結果を表示する方法はありますか?
回答:
デバッグなしで実行すると(Ctrl + F5)、デフォルトでは、Enterキーを押してウィンドウを閉じるように求められます。デバッガーを使用する場合は、最終行にブレークポイントを配置する必要があります。
ctrl+f5
作業しています。機能していません。Properties
プロジェクトを右クリックしても、wrench icon
グレー表示されます。
プロジェクトを右クリック
プロパティ>構成プロパティ>リンカー>システム
選択:コンソール(CONSOLE / SUBSYSTEM)の中にSubSystem
オプションまたはあなただけ入力することができますコンソールをテキストフィールドに!
今それを試してください...それはうまくいくはずです
CTRL+F5
たとえば、新しいC ++ファイルを空のプロジェクトに追加すると、使い慣れたものは失敗します。
C / C ++の方法は次のとおりです。
#include <stdlib.h>
#ifdef _WIN32
#define WINPAUSE system("pause")
#endif
これをプログラムの先頭に置き、Windowsシステム(#ifdef _WIN32
)にある場合は、というマクロを作成しますWINPAUSE
。プログラムを一時停止したいときはいつでも呼び出しWINPAUSE;
て、DOSコマンドを使用してプログラムを一時停止します。Unix / Linuxなどの他のシステムでは、コンソールはプログラムの終了時に終了しません。
pause
コマンドは、Windows固有です。
後藤デバッグメニュー- > プレス StartWithoutDebugging
.NETを使用している場合Console.ReadLine()
は、プログラムの最後の前に置きます。
お待ちしており<ENTER>
ます。
Console.ReadKey()
任意のキーを待つだけ。
Visual Studio 2017(15.9.4)以降、オプションがあります。
Tools->Options->Debugging->Automatically close the console
Visual Studioドキュメントの対応するフラグメント:
デバッグが停止したときにコンソールを自動的に閉じる:
デバッグセッションの最後にコンソールを閉じるようにVisual Studioに指示します。
(/ 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では、そのようなトリックは必要ありませんでした。
これは、(1)コードの変更やブレークポイントを必要としないソリューションであり、(2)プログラムの終了後に一時停止して、印刷されたすべての内容を確認できます。F5キーまたはCtrl + F5キーを押すと一時停止します。主な欠点は、VS2013 Express(テスト済み)ではシンボルが読み込まれないため、デバッグが非常に制限されることです。
バッチファイルを作成します。私runthenpause.bat
は次の内容でmineを呼び出しました。
%1 %2 %3 %4 %5 %6 %7 %8 %9
pause
1行目は、指定したコマンドと最大8つの引数を実行します。2行目は...一時停止します。
プロジェクトのプロパティを開く| 構成プロパティ| デバッグ。
$(TargetPath)
(または「コマンド」にあるもの)に変更します。runthenpause.bat
ます。さて、あなたが走ると、 runthenpause.bat
するとアプリケーションが起動し、アプリケーションが終了すると一時停止してコンソール出力が表示されます。
シンボルをロードする方法がわかればアップデートを投稿します。私が試した/Z7
あたりに、このしかし、成功せず。
「| プロジェクトプロパティのデバッグセクションの下にあるコマンド引数ボックスの[一時停止]をクリックします。
pause
はバッチファイルでのみ機能するように見え、STDINでプログラムから入力を受け取りますが、そのテキストは再印刷しません。で置き換え|
てみましたが&&
、効果がありませんでした。おそらく、コマンドシェル(cmd.exe)で実行していないためです。
CNTRL + F5を押すだけで、外部のコマンドラインウィンドウで開きます(Visual Studioでは制御できません)。
これが機能しない場合は、コードの最後に次を追加します。
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
これは、コードが最後に到達したら、キーを押してターミナルウィンドウを閉じるのを待ちます。
これを複数の場所で実行する場合は、上記のコードをメソッド(などprivate void Pause()
)に挿入しPause()
、プログラムが終了する可能性がある場合は必ず呼び出します。
やや良い解決策:
atexit([] { system("PAUSE"); });
プログラムの始めに。
長所:
cin.sync(); cin.ignore();
なくトリックを使用する場合は、OSに依存しないsystem("pause");
)短所:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
このオプションを使用することもできます
#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;
}
私の場合、VS 2017コミュニティエディションで空のC ++プロジェクトを作成したときにこれを経験しました。設定のプロパティで、サブシステムを「コンソール(/ SUBSYSTEM:CONSOLE)」に設定する必要があります。
Console.ReadLine()
プログラムの最後に使用します。これにより、Enterキーを押すまでウィンドウが開いたままになります。詳細については、https://docs.microsoft.com/en-us/dotnet/api/system.console.readlineを参照してください。