system("pause")
あなたはハックを使いたくないと言います。なぜだめですか?
デバッグされていないときにプログラムにプロンプトを表示させたくない場合は、それを回避する方法があります。これは私のために働く:
void pause () {
system ("pause");
}
int main (int argc, char ** argv) {
// If "launched", then don't let the console close at the end until
// the user has seen the report.
// (See the MSDN ConGUI sample code)
//
do {
HANDLE hConsoleOutput = ::GetStdHandle (STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE == hConsoleOutput)
break;
CONSOLE_SCREEN_BUFFER_INFO csbi;
if (0 == ::GetConsoleScreenBufferInfo (hConsoleOutput, &csbi))
break;
if (0 != csbi.dwCursorPosition.X)
break;
if (0 != csbi.dwCursorPosition.Y)
break;
if (csbi.dwSize.X <= 0)
break;
if (csbi.dwSize.Y <= 0)
break;
atexit (pause);
} while (0);
このコードを、作成中の新しい各コンソール アプリケーションに貼り付けるだけです。プログラムがコマンド ウィンドウから実行されている場合、カーソル位置は <0,0> にならず、atexit()
. デバッガー (任意のデバッガー) から起動された場合、コンソールのカーソル位置は <0,0> になり、atexit()
呼び出しが実行されます。
MSDN ライブラリにあったサンプル プログラムから着想を得たのですが、削除されたようです。
注: system() ルーチンの Microsoft Visual Studio 実装では、コマンド ライン インタープリターを識別するために COMSPEC 環境変数が必要です。この環境変数がめちゃくちゃになった場合 (たとえば、Visual Studio プロジェクトのデバッグ プロパティに問題があり、プログラムの起動時に環境変数が適切に渡されない場合) は、黙って失敗します。 .