最近、私はこのウェブサイトからC ++を学ぼうとしています。残念ながら、コードサンプルの1つを実行しようとすると、そのプログラムが約0.5秒間開いてからすぐに閉じます。努力の成果を確認できるように、プログラムがすぐに終了しないようにする方法はありますか?
最近、私はこのウェブサイトからC ++を学ぼうとしています。残念ながら、コードサンプルの1つを実行しようとすると、そのプログラムが約0.5秒間開いてからすぐに閉じます。努力の成果を確認できるように、プログラムがすぐに終了しないようにする方法はありますか?
回答:
編集: Charles Baileyが以下のコメントで正しく指摘しているように、にバッファリングされている文字がある場合、これは機能せずstdin
、それを回避するための良い方法は本当にありません。デバッガーを接続して実行している場合、John Diblingが提案する解決策は、おそらく問題に対する最もクリーンな解決策です。
とは言っても、これはここに残しておきます。他の誰かが役に立つと思うかもしれません。開発中にテストを作成するときに、一種の簡単なハックとして多く使用しました。
main
関数の最後で、次を呼び出すことができますstd::getchar();
これはから1文字を取得するためstdin
、「続行するには任意のキーを押してください」という種類の動作を提供します(実際に「任意のキーを押してください」というメッセージが必要な場合は、自分で印刷する必要があります)。
あなたはする必要が#include <cstdio>
ためgetchar
。
getchar
問題を解決しない-または少なくとも限られた状況でのみ。からcharを読み取りますが、stdin
stdinからバッファリングされた文字がすでにある場合、プロンプトを出力するかどうかに関係なく、プログラムは待機せずに続行します。
\n
は部分的な解決策ですが、複数行の入力がバッファリングされている場合は役に立ちません。入力ストリームからすべてをクリアする標準C ++の方法を知りません。:-/
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
、#include <limits>
です。
Visual Studioを使用していて、IDEからコンソールアプリケーションを起動している場合:
CTRL-F5(デバッグなしで開始)を押すと、アプリケーションが起動し、任意のキーを押すまでコンソールウィンドウを開いたままにします。
Jamesによるソリューションは、すべてのプラットフォームで機能します。
またはWindows
、main
関数から戻る直前に次のコードを追加することもできます。
system("pause");
これはpause
、キーを押すまで待機するコマンドを実行し、素敵なメッセージも表示しますPress any key to continue . . .
MicrosoftのVisual C ++ 2010 Expressを使用していて、プログラムが終了した後、CTRL + F5がコンソールを開いたままにできないという問題が発生した場合は、このMSDNスレッドをご覧ください。
CTRL + F5を実行した後、IDEがコンソールを閉じるように設定されている可能性があります。実際、Visual C ++ 2010の「空のプロジェクト」は、デフォルトでコンソールを閉じます。これを変更するには、Microsoftモデレーターの提案に従ってください。
プロジェクト名を右クリックして[プロパティ]ページに移動し、[構成プロパティ]-> [リンカー]-> [システム]を展開して、[サブシステム]ドロップダウンで[コンソール(/ SUBSYSTEM:CONSOLE)]を選択してください。デフォルトでは、Emptyプロジェクトはそれを指定していません。
通常、main()
の閉じ中かっこにブレークポイントを設定します。何らかの方法でプログラムの最後に到達すると、ブレークポイントがヒットし、ALTキーを押しながらコンソールウィンドウに移動して出力を表示できます。
Windowsを使用している場合は、プログラムをコンソールから実行するのではなく、cmd.exeからプログラムを実行するのはなぜですか。これにより、プログラムの終了後もウィンドウは開いたままになります。
[編集]:KDevelop4を使用すると、IDEの下部にあるタブでBash(Linux CLI)の完全なインスタンスが実行されています。これは、私がこのような状況で使用するものです。
main
定義されている場合はこれがデフォルトであると記載されていますが、コマンドラインで明示的に設定しない場合、VSはアプリケーションの終了時にウィンドウを強制終了します。 ため息
main
プロジェクトで定義すると、リンカーはデフォルトでCONSOLEサブシステムを使用します。デバッグまたは実行すると、コンソールウィンドウが表示されます。ただし、プロジェクトプロパティでサブシステムとしてCONSOLEを明示的に指定しない限り、Visual Studioはコンソールウィンドウを開いたままにしません。私はいつも空のプロジェクトから始めて、個々のプロジェクトのプロパティを変更することはめったにないので、コンソールウィンドウが動かなくなるのを見たことがありません。混乱して申し訳ありません
コードの終わりの前に、次の行を挿入します。
system("pause");
これは、キーを押すまでコンソールを維持します。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cout << "Please enter your first name followed by a newline\n";
cin >> s;
cout << "Hello, " << s << '\n';
system("pause"); // <----------------------------------
return 0; // This return statement isn't necessary
}
cin.get();
2回電話する:
//...
cin.get();
cin.get();
return 0
}
Code :: Blocksなどの有能なIDEからコードを実行する場合、IDEはコードの実行に使用するコンソールを管理し、アプリケーションが閉じてもコードを開いたままにします。コンソールを開いたままにする特別なコードを追加する必要はありません。これにより、IDEの外部で実際に使用するときにコンソールが正しく機能しなくなるためです。
Visual Studioを使用してWindowsを使用していると思いますが、なぜですか?なんらかのLinux OSを使用している場合は、おそらくコンソールから実行しているからです。
とにかく、他の人が示唆しているように、あなたはあなたのプログラムの最後にがらくたを追加することができます、またはあなたは単にCTRL + F5を押すことができます(デバッグなしで開始)を、Visual Studioはコンソールを完了したままにしておきます。
デバッグバージョンを実行し、コードにがらくたを追加しない場合の別のオプションは、コンソールウィンドウを開き([スタート]-> [実行]-> [cmd])、デバッグ出力ディレクトリに移動することです。次に、実行可能ファイルの名前を入力するだけで、コンソールでデバッグプログラムが実行されます。その後、Visual Studioのプロセスへのアタッチを使用して、本当にやりたいことができます。
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
cout << "Press any key to continue...";
getch();
return 0;
}
他の誰かがこれを投稿していることに気づかなかったので、ここにあります。
conio.h
はWindows固有のヘッダーであり、すべてのマシンで利用できるとは限りません(または、個別にリンクする必要があるかもしれません。これはやり過ぎです)。
アプリケーションをVisual C ++で実際にデバッグしている場合は、F5キーまたはツールバーの緑色の三角形を押します。実際にデバッグしていない(ブレークポイントが設定されていない)場合は、Ctrl + F5キーを押すか、メニューの[デバッグなしで開始]を選択します(通常は[デバッグ]メニューにありますが、混乱します)。さらに重要なのは、コードを変更しなくても、最後に一時停止することです。
または、コマンドプロンプトを開き、exeがあるフォルダーに移動して、名前を入力して実行します。そうすれば、コマンドプロンプトの実行が終了しても終了せず、出力を確認できます。私は、これらの方法の両方を、アプリが終了したときにアプリを停止するコードを追加するよりも好みます。
プログラムの最後に以下を追加してください。何らかの形のユーザー入力をキャプチャしようとするため、コンソールが自動的に閉じなくなります。
cin.get();
いずれかの前に、以下の行を追加しますexit()
機能、または任意の前return
でS main()
:
std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");
Visual Studio(およびVisual Studioのみ)の場合、次のコードスニペットは、最初に入力バッファーをフラッシュすることにより、ユーザーが新しいキーを明示的に押すのを本当に待つ「キープレスの続行を待機する」プロンプトを提供します。
#include <cstdio>
#include <tchar.h>
#include <conio.h>
_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();
これはtchar.h
マクロを使用して、複数の「文字セット」と互換性があることに注意してください(VC ++がそれらを呼び出すため)。
私はこれをします:
//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;
注:cinバッファーなどをクリアする必要があるのは、プログラムの初期の段階でcinを使用した場合のみです。また、std :: numeric_limits :: max()を使用することは、おそらくINT_MAXより優れていますが、少し冗長であり、通常は不要です。
以下のコードのように#include "stdafx.h"
&を使用system("pause");
します。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
std::cout << "hello programmer!\n\nEnter 2 numbers: ";
int x, y;
std::cin >> x >> y;
int w = x*y;
std::cout <<"\nyour answer is: "<< w << endl;
system("pause");
}
system
<cstdlib>
ではなくで宣言されていstdafx.h
ます。
単に
#include <cstdio>
int main(){
// code...
std::getchar();
std::getchar();
return 0;
}
何らかの理由で、プログラムを実行するときに、通常stdinにあるgetcharを使用して1文字を読み取ることができます。したがって、最初のgetcharはこの文字を読み取り、2番目のgetcharはユーザー(ユーザー)の入力を待ってからプログラムを終了します。そして、プログラムがほとんどの端末を終了した後、特にWindowsでは、端末をすぐに閉じます。したがって、プログラムがすべてを出力した後にプログラムが終了しないようにする簡単な方法を目指しています。もちろん、これを解決するためのより複雑でクリーンな方法がありますが、これが最も簡単です。
Windowsを実行している場合は、system("pause >nul");
またはを実行できますsystem("pause");
。コンソールコマンドを実行して、キーを押すまでプログラムを一時停止します。>nul
言うことを防ぎますPress any key to continue...
。
プログラムの最後のリターン0にブレークポイントを配置しています。正常に動作します。
0を返す直前にcin.ignore()を使用してください。二度
main()
{
//your codes
cin.ignore();
cin.ignore();
return 0;
}
それで全部です
xに変数を設定し、戻り値0の前にこれを入力するだけです。
cout<<"\nPress any key and hit enter to end...";
cin>>x;