私はVisual C++で始めていますが、コンソールウィンドウを維持する方法を知りたいです。
たとえば、これは典型的な「hello world」アプリケーションになります。
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
行方不明の行は何ですか?
でプロジェクトを開始 Ctrl+F5 ただの代わりに F5。
プログラムの終了後、コンソールウィンドウはPress any key to continue . . .
メッセージで開いたままになります。
これにはConsole (/SUBSYSTEM:CONSOLE)
リンカーオプションが必要であり、次のように有効にできることに注意してください。
CTRL-F5とサブシステムヒントは連携して動作します。それらは別個のオプションではありません。
(DJMorreTXの提供 http://social.msdn.Microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
標準的な方法は、returnステートメントの前のcin.get()
です。
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
return
行にブレークポイントを配置します。
デバッガで実行していますか?
別のオプションは使用することです
#include <process.h>
system("pause");
これはWindowsでのみ機能するため、あまり移植性がありませんが、自動的に印刷されます
何かキーを押すと続行します...
メイクファイルプロジェクトの場合、Visual Studioのバグ(少なくともバージョン2012まで存在するため、2013年はまだテストしていません)により、受け入れられたソリューションは失敗します。このバグの詳細は こちら です。
Makefileプロジェクトでプログラムの終了後にコンソールを一時停止するには、次の手順を実行します(2010〜2012以外のバージョンでは異なる場合があります)。
1) -EDIT:以下を参照してください。/SUBSYSTEM:CONSOLE
をリンカーに渡します。
2)テキストエディターでプロジェクトファイル(.vcxproj)を開きます。
3)ルート<project>
タグ内に、次を挿入します。
<ItemDefinitionGroup> <Link> <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup>
4)プロジェクトをソリューションにリロードします。
5)デバッグせずにプログラムを実行します(CTRL + F5)。
編集:
以下の私のコメントによると、リンカーオプション/SUBSYSTEM:CONSOLE
の設定は、実際にはメイクファイルプロジェクトには関係ありません(MSVC以外のコンパイラを使用している場合は、必ずしも可能でさえありません)。重要なのは、上記の手順3に従って、設定が.vcxprojファイルに追加されることだけです。
コンソールウィンドウが閉じないようにするには、returnステートメントの直前にcin.get();
またはcin.ignore();
を使用できます。
mainの最後の中括弧にブレークポイントを置くだけです。
int main () {
//...your code...
return 0;
} //<- breakpoint here
デバッグなしで実行する必要はありません。また、ブレークポイントに到達する前にデストラクタを実行するため、これらのデストラクタに出力されたメッセージがある場合はそれらを確認できます。
_tmain
メソッドの閉じ括弧にブレークポイントを追加するだけです。これは簡単な方法です。さらに、デバッグするためにコードを追加する必要はありません。
私の2セント:
選択肢1:main()
の最後にブレークポイントを追加する
選択肢2:このコードをreturn 0;
の直前に追加します。
std::cout << "Press ENTER to continue..."; //So the User knows what to do
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
<iomanip>
にはstd::numeric_limits
を含める必要があります
次のように0を返す前に、コードの最後にsystem( "pause")を追加するだけです
#include <stdlib.h>
int main()
{
//some code goes here
system("pause")
return 0;
}
main()
の終了中括弧にブレークポイントを配置します。複数のreturn
ステートメントがあってもトリップします。唯一の欠点は、exit()
への呼び出しがキャッチされないことです。
デバッグしていない場合は、Zoidbergの答えのアドバイスに従って、プログラムを開始してください。 Ctrl+F5 ただの代わりに F5。
#include <conio.h>
を含めてから、return 0;
行の直前にgetch();
を追加します。とにかく学校で学んだことです。ここで述べた方法は、私が見るものとはまったく異なります。
cin.get()
、またはsystem("PAUSE")
。 return(0);
を使用できるとは聞いていません
同じ問題がありました。 returnステートメントの直前に_getch()
を使用しています。できます。
別のオプション:
#ifdef _WIN32
#define MAINRET system("pause");return 0
#else
#define MAINRET return 0
#endif
主に:
int main(int argc, char* argv[]) {
MAINRET;
}
int main()
{
//...
getchar();
return 0;
}
コードを変更せずに実行が停止する方法に関係なく、コマンドウィンドウを開いたままにする方法を次に示します。
Visual Studioで、-プロジェクトプロパティページ-> デバッグを開きます。
Commandの場合、$(ComSpec)
を入力します
コマンド引数の場合、/k $(TargetPath)
を入力します。独自のアプリケーションに引数を追加します。
これでF5またはCtrl-F5が実行されますWindows/System32/cmd.exe新しいウィンドウで/ k実行完了後、コマンドプロンプトが開いたままになるようにします。
欠点は、ブレークポイントで実行が停止しないことです。
実際、実際のソリューションはプロジェクトテンプレート自体の選択です。古いVSでWin32コンソールアプリケーションを選択するか、最初にプロジェクト名を入力してから、Windowsデスクトップウィザードをダブルクリックしてから、Win32コンソールアプリケーションを選択する必要があります。次に、この時点で空のプロジェクトを選択します。これにより、追加の停止ポイントとホールドコードを追加することなく、元の質問者が本当に望んでいたことを可能にします。私もこの問題を経験しました。答えはMSDNサイトにもあります。
同じ問題がありました。私のアプリケーションには複数のexit()ポイントがあり、それが正確に終了する場所を知る方法がありませんでした。
atexit(system("pause"));
または
atexit(cin.get());
この方法では、プログラムのどこで終了しても停止します。
(一部のオプションは異なる名前で呼び出される場合があります。英語版は使用していません)
「空のプロジェクト」オプションでプロジェクトを作成したときに、「空のプロジェクト」ではなく「Win32-consoleアプリケーション」としてプロジェクトを作成すると、同じ問題が発生しました。ここでポップアップするダイアログで、「続行」を押し、その後、「空のプロジェクト」オプションをチェックして確認を押します。その後、CTRL + F5は自動的に閉じないコンソールを開きます。