2010-12-03 11 views
20

C#では、コンソールに文字が入力されるのを待つことができます(これは、プログラムが終了する前にコンソールの最後の出力を見るために便利です)。 C++の初心者として、私はそれが何であるか分かりません。 1つはありますか?C++でコンソールが一時停止していますか?

+0

WindowsまたはLinux? –

+2

重複:http://stackoverflow.com/questions/1173208/what-is-the-best-practice-for-combating-the-console-closing-issue –

+0

@Stefan:windows。 – RCIX

答えて

3

標準には何もなく、プラットフォーム間に何もありません。通常の方法は、< Enter>を押すのを待ってから結果を破棄することです。

+0

C++標準ライブラリはANSI/C++ ISO言語標準に組み込まれ、クラス 'istream'の' std :: cin'を含みます。これはクロスプラットフォームであり、「何も」ではありません。 – Abel

+0

@Abel:ラインバッファリング。 –

29

最も簡単な方法は、単純です:

std::cin.get(); 

あなたが「継続するために、任意のキーを押してください...」その前のようなものを印刷することができます。一部の人があなたに語ります

system("pause"); 

しかし、使用しないでください。ポータブルではありません。

+8

'cin.get()'は1文字を読み込むはずですが、端末がラインバッファリングを行う可能性が高いので、 'get()'の呼び出しが戻る前にEnterキーを押す必要があることに注意してください。 –

5
#include <stdio.h> 
// ... 
getchar(); 

この関数は、1回のキー入力を待ち、整数値を返します。

例えば、私はSystem("pause")と同じ処理を行い機能を有するが、(ところで、潜在的なセキュリティの全体で、)「pause.exe」ことを必要とせず:

void pause() 
{ 
    std::cout << std::endl << "Press any key to continue..."; 
    getchar(); 
} 
+5

'pause.exe'はありません。 'pause'自体は、Windowsシェルの組み込みコマンドです。 –

+2

さて、私は、コマンドの一時停止が基本的にプログラム "一時停止"である全体のプロセスを実行するという印象を受けました。例えば、 'system(" notepad ")'(ウィンドウ上)はメモ帳を開始するので、このコマンドは他の実行可能ファイルを確実に起動することができます。 – Mephane

0

が正しく溶液は次のようになりsystem("pause")を使用すると、セキュリティホール(悪質なpause.exeがディレクトリに作成されます!)が発生し、クロスプラットフォームではありません(一時停止はWindows/DOS上にのみ存在します)。簡単な解決策はあり

void myPause() { 
    printf("Press any key to continue . . ."); 
    getchar(); 
} 

は、これはPOSIX(thisを参照)に準拠している、getchar()を使用しています。 あなたはこのように、この機能を使用することができます。

int main() { 
    ... 
    myPause(); 
} 

これが効果的に点滅してから出て行くからコンソールを防ぐことができます。