web-dev-qa-db-ja.com

C ++コンソールアプリケーションがすぐに終了しないようにする方法

最近、 this website からC++を学ぼうとしています。残念ながら、コードサンプルの1つを実行しようとすると、そのプログラムが約0.5秒間開いてからすぐに閉じます。私が自分の努力の成果を見ることができるようにプログラムをすぐに閉じるのを止める方法はありますか?

181
Adam P

編集:以下のコメントでCharles Baileyが正しく指摘しているように、stdinにバッファされている文字があるとこれはうまくいきません。デバッガを接続して実行している場合は、 John Diblingが提案している解決策 がおそらく最も問題のない解決策です。

とは言っても、私はこれをここに残しておくでしょう、そしておそらく他の誰かがそれが役に立つと思うでしょう。開発中にテストを書く際には、これを簡単な種類のハックとしてよく使用しました。


main関数の終わりに、 std::getchar(); を呼び出すことができます。

これはstdinから1文字を取得するので、「続けてキーを押してください」というような動作をします(実際に「キーを押してください」というメッセージが必要な場合は、自分で印刷する必要があります)。

getcharには#include <cstdio>が必要です。

111
James McNellis

Visual Studioを使用していてIDEからコンソールアプリケーションを起動している場合

CTRL-F5(デバッグなしで起動)を押すとアプリケーションが起動し、何かキーを押すまでコンソールウィンドウは開いたままになります。

135
nabulke

Jamesによるソリューションは、すべてのプラットフォームで機能します。

Windowsでは、main関数から戻る直前に以下を追加することもできます。

  system("pause");

これはpauseコマンドを実行し、あなたがキーを押すまで待ち​​、またNiceメッセージPress any key to continue . . .を表示します。

99
codaddict

MicrosoftのVisual C++ 2010 Expressを使用していて、プログラムの終了後にCTRL + F5がコンソールを開いたままにしておかないと問題が発生する場合は、 このMSDNスレッド

CTRL + F5を実行した後、IDEがコンソールを閉じるように設定されている可能性があります。実際、Visual C++ 2010の "空のプロジェクト"はデフォルトでコンソールを閉じます。これを変更するには、Microsoftモデレータの指示に従って行います。

プロジェクト名を右クリックして[プロパティ]ページに移動し、[構成プロパティ] - > [リンカ] - > [システム]の順に展開し、[サブシステム]ドロップダウンで[コンソール](/ SUBSYSTEM:CONSOLE)を選択します。デフォルトでは、Emptyプロジェクトでは指定されていないためです。

78
Mr. Underhill

私は通常main()の閉じ中括弧にブレークポイントを置くだけです。何らかの方法でプログラムの終わりに達すると、ブレークポイントがヒットし、コンソールウィンドウに[Alt] + [Tab]を押して出力を表示できます。

18
John Dibling

Windowsを使用している場合は、コンソールからプログラムを実行しないでください。つまり、cmd.exeからプログラムを実行してください。プログラムが終了した後もウィンドウは開いたままになります。

[編集]:私がKDevelop 4を使うとき、IDEの一番下のタブで走っているBash(Linux CLI)の本格的なインスタンスがあります。これは私がこのような状況で使うものです。

14
Amos

コードの終わりの前に、次の行を挿入してください。

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
}
9
robert

cin.get();を2回呼び出します。

    //...
    cin.get();
    cin.get();
    return 0
}
8
tsx

Code :: Blocks のように、適切なIDEからコードを実行する場合、IDEはそれが使用するコンソールを管理します。アプリケーションを閉じるときに開いたままにして、コードを実行します。コンソールを開いたままにしておくための特別なコードを追加したくはありません。これは、IDEの外部で実際に使用すると正しく機能しなくなるためです。

4
anon

さて、私はあなたがWindows上でVisual Studioを使用していると思います...なぜですか?もしあなたがある種のLinux OSを使っているのなら、おそらくコンソールからそれを実行しているはずです。

とにかく、他の人が提案しているようにあなたのプログラムの終わりにがらくたを付け加えることができます、あるいはただCTRL + F5(デバッグなしで始める)を打つことができます。 。

デバッグバージョンを実行してコードにがらくたを追加しない場合のもう1つの選択肢は、コンソールウィンドウを開き([スタート] - > [ファイル名を指定して実行] - > cmd)、デバッグ出力ディレクトリに移動することです。その後、実行可能ファイルの名前を入力するだけで、コンソールでデバッグプログラムが実行されます。その後、Visual Studioのattach to processを使用するか、必要に応じて使用できます。

3
Polaris878

以下のコードのように#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");
}
2
Mohammed Nouh

実際にアプリケーションをVisual C++でデバッグしている場合は、F5キーまたはツールバーの緑色の三角形を押します。本当にデバッグしていない(ブレークポイントを設定していない)場合は、Ctrl + F5キーを押すか、メニューの[デバッグなしで開始]を選択します(通常は[デバッグ]メニューにあります)。そしてあなたにとってより重要なことは、あなたがあなたのコードを変更する必要なしに最後に一時停止するでしょう。

または、コマンドプロンプトを開き、exeがあるフォルダに移動して、名前を入力して実行します。このようにして、コマンドの実行が終了したときにプロンプ​​トを閉じることはできず、出力を見ることができます。私はこれらの方法の両方が、完成したときと同じようにアプリを停止させるコードを追加することを好む。

2
Kate Gregory

次の行をexit()関数の前、またはmain()内のreturnの前に追加します。

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");
2
Thomas Matthews

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++がそれらを呼び出すので)。

2
MicroVirus

私はこれをするだけです:

//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よりも優れていますが、少々手間がかかり、通常は不要です。

2
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

私は他の誰かがこれを投稿したことに気づかなかったので、ここにあります。

2
Ruan

プログラムの最後に以下を追加するだけです。何らかの形のユーザー入力を取り込もうとするため、コンソールが自動的に閉じるのを防ぎます。

cin.get();
2
Bat_Programmer

yehと同じような考え方で、単なる最小の選択肢です。

次の内容のバッチファイルを作成します。

helloworld.exe
pause

次にバッチファイルを使用します。

1
Cœur

単に

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}
0
Dmitriy Suserov

プログラムの最後の戻り値0にブレークポイントを設定しています。それはうまくいきます。

0
lierosk

Windowsを実行している場合は、system("pause >nul");またはsystem("pause");を実行できます。キーを押すまでプログラムを一時停止するコンソールコマンドを実行します。 >nulはそれがPress any key to continue...を言わないようにします。

0
PatThaCoder

0を返す直前にcin.ignore()を使用してください。二度

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

それで全部です

0
Kursat Turkay

実行ボタンを押す代わりに、CtrlキーとF5キーを同時に押すと、メッセージを続行するための任意のキーを押すことができます。または、メイン機能の最後に「(警告は実際のプログラムではなくテストにのみ使用します。アンチウイルスとしては使用しないでください!!!!)」と入力してください。好きじゃない!!!!)

0
anony

プログラムの終了後もウィンドウを開いたままにするため、IDEにプロジェクト設定のチェックボックスがあるかどうかを確認します。そうでない場合は、std::cin.get();を使用してmain関数の最後にある文字を読み取ります。ただし、行ベースの入力(std :: getline)のみを使用するか、それ以外の場合は未読文字の処理(std :: ignoreまでの改行)を使用してください。早く未読。

0
Tronic

私はcin.get()を使いましたが、それはうまくいきましたが、ある日、その前に別のcin.get([Array Variable])を使う必要がありました。そのため、cin.get()はコマンドプロンプトウィンドウを閉じるのを避けませんでした。最後に私はもう一つの方法を見つけました:外​​部ウィンドウで開くためにCTRL + F5を押すとVisual Studioはもうそれを制御できません。最後のコマンドが実行された後に閉じることについてあなたに尋ねます。

0
QMaster

あなたはいつでもバッチファイルを作成することができます。たとえば、プログラムの名前がhelloworld.exeの場合、コードは次のようになります。

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1
0
yeh

これはうまくいくようです:

cin.clear();
cin.ignore(2);

最初にバッファをクリアしても、次のバッファを読んでも問題ありません。何らかの理由でcin.ignore(1)が機能しない場合は、2にする必要があります。

0
Northcode

最後にgetchar()関数を入れてみました。しかし、うまくいきませんでした。それで私がしたのは二つのgetchar()関数を次々に追加することでした。最初のgetchar()は、 Enter 最後のデータ入力後に押すキー。 1つではなく2つのgetchar()関数を追加してみてください。

0
Samriddhi Sinha