Visual C ++で始めていますが、コンソールウィンドウを保持する方法を知りたいのですが。
たとえば、これは典型的な「Hello World」アプリケーションです。
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
行方不明のものは何ですか?
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とサブシステムのヒントは一緒に機能します。これらは別個のオプションではありません。
(http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6からのDJMorreTXの礼儀)
cin.get(),getchar(), system("pause")
やその他のゴミを変更する必要はありません。これを変更すると動作します。
system("pause");
コードの最後に追加するだけです。それは理にかなっており、正常に動作します。
標準的な方法はcin.get()
、returnステートメントの前です。
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
_tmain
。cin.get()
F5にブレークポイントを配置するか、Ctrl F5を使用する代わりに、別の-1に投票します。しかし、私は1つの反対投票のみ許可されています。
_tmain
?これは、コンソールサブシステムをターゲットとするWindowsアプリケーションを作成する標準的な方法です。その標準から逸脱することは悪い習慣になるでしょう。明らかに、ここでは移植可能なコードについて誰も話していません。質問はVisual C ++であり_tmain
、サンプルコードに表示される署名です。この宗教を放棄する時がきました。Windowsはデフォルトで「非標準」であり、その標準に従うことには十分な理由があります。
_tmain
は、それが完全に不要な非標準であること(国際的なC ++標準にはプレーンが必要main
)であること、およびMicrosoftのT
マクロスキームを使用していることです。標準から逸脱することが悪い習慣であると感じる場合は、絶対にを使用しないでくださいtmain
。tmain
トローリングを除いて、または専門家の場合、自分の完全な無能を表示することを除いて、を使用する正当な理由はありません。
return
行にブレークポイントを置きます。
デバッガで実行していますよね?
別のオプションは使用することです
#include <process.h>
system("pause");
これはWindowsでのみ機能するため、移植性は高くありませんが、自動的に印刷されます。
何かキーを押すと続行します...
system
で宣言されてい<stdlib.h>
ます。
メイクファイルプロジェクトの場合、Visual Studioのバグが原因で、承認されたソリューションは失敗します(少なくともバージョン2012までは存在します-2013はまだテストしていません)。このバグの詳細はこちらです。
makefileプロジェクトでプログラムの終了後にコンソールを一時停止するには、次の手順を実行します(これは2010〜2012以外のバージョンでは異なる場合があります)。
1)- 編集:以下を参照してください。/SUBSYSTEM:CONSOLE
リンカーに渡します。
2)テキストエディターでプロジェクトファイル(.vcxproj)を開きます。
3)ルート<project>
タグ内に、以下を挿入します:
<ItemDefinitionGroup> <Link> <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup>
4)ソリューションにプロジェクトを再ロードします。
5)デバッグせずにプログラムを実行します(CTRL + F5)。
編集:
以下の私のコメントのとおり、リンカオプションの設定は/SUBSYSTEM:CONSOLE
メイクファイルプロジェクトには実際には関係ありません(MSVC以外のコンパイラを使用している場合は、必ずしも可能ではありません)。重要なのは、上記のステップ3のように、設定が.vcxprojファイルに追加されることです。
/SUBSYSTEM:CONSOLE
リンカーに渡すことが実際には無関係であることを発見しました-ステップ3がすべての問題です。私の答えはメイクファイルプロジェクトに関連していることに注意してください-メイクファイルプロジェクトでは、IDEはリンカーに渡すものを知る方法がありません(/SUBSYSTEM:CONSOLE
オプションのあるコンパイラを使用していない可能性もあります)。これはプロジェクトです。それ自体がコンソールプログラムであるかどうかを追跡するそれ自体。私はそれに応じて私の答えを編集します。
私の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
含めて、行の直前に#include <conio.h>
追加します。それはとにかく私が学校で学んだことです。上記の方法は、私が見ているものとはかなり異なります。getch();
return 0;
同じ問題があった。_getch()
return文の直前を使ってい ます。できます。
私も同じ問題を抱えていました。私のアプリケーションには複数のexit()ポイントがあり、正確にそれがどこにあるかを知る方法がなかったので、私はこれについて知りました:
atexit(system("pause"));
または
atexit(cin.get());
このようにして、プログラムのどこで終了しても停止します。
atexit
。atexit
整数ではなく関数ポインタを取ります。
実際、実際の解決策は、プロジェクトテンプレート自体の選択です。古いVSでWin32コンソールアプリケーションを選択するか、最初にプロジェクト名を入力してから、Windowsデスクトップウィザードをダブルクリックして、Win32コンソールアプリケーションを選択する必要があります。次に、この時点で空のプロジェクトを選択します。これにより、追加のストップポイントとホールドコードを追加することなく、元の質問者が本当に望んでいたことが可能になります。私もこの問題を経験しました。答えはMSDNサイトにもあります。
以下は、コードを変更せずに実行が停止した方法に関係なく、コマンドウィンドウを開いたままにする方法です。
Visual Studioで、[ プロジェクトプロパティページ] -> [ デバッグ]を開きます。ます。
以下のためのコマンド、入力します。$(ComSpec)
以下のためにコマンド引数、入力します/k $(TargetPath)
。独自のアプリケーションに引数を追加します。
これで、F5またはCtrl-F5は新しいウィンドウでWindows / System32 / cmd.exeを実行し、/ kは実行の完了後もコマンドプロンプトを開いたままにします。
欠点は、実行がブレークポイントで停止しないことです。
あなたは単にkeep_window_open(); 戻る前にここに一例があります
int main()
{
cout<<"hello world!\n";
keep_window_open ();
return 0;
}