web-dev-qa-db-ja.com

Visual C ++でコンソールウィンドウを開いたままにする方法

私はVisual C++で始めていますが、コンソールウィンドウを維持する方法を知りたいです。

たとえば、これは典型的な「hello world」アプリケーションになります。

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World";
    return 0;
}

行方不明の行は何ですか?

180
Raúl Roa

でプロジェクトを開始 Ctrl+F5 ただの代わりに F5

プログラムの終了後、コンソールウィンドウはPress any key to continue . . .メッセージで開いたままになります。

これにはConsole (/SUBSYSTEM:CONSOLE)リンカーオプションが必要であり、次のように有効にできることに注意してください。

  1. プロジェクトを開き、ソリューションエクスプローラーに移動します。 K&Rで一緒にフォローしている場合、「ソリューション」は「hello」になり、その下に1つのプロジェクトがあり、「hello」も太字で表示されます。
  2. 「hello」(またはプロジェクト名)を右クリックします。
  3. コンテキストメニューから[プロパティ]を選択します。
  4. [構成プロパティ]> [リンカー]> [システム]を選択します。
  5. 右側のペインの「サブシステム」プロパティについては、右側の列のドロップダウンボックスをクリックします。
  6. 「コンソール(/ SUBSYSTEM:CONSOLE)」を選択します
  7. [適用]をクリックし、それが行うことをすべて完了するまで待ってから、[OK]をクリックします。 ([適用]がグレー表示されている場合、他のサブシステムオプションを選択して[適用]をクリックし、戻ってコンソールオプションを適用します。私の経験では、それ自体は機能しません。)

CTRL-F5とサブシステムヒントは連携して動作します。それらは別個のオプションではありません。

(DJMorreTXの提供 http://social.msdn.Microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6

377
Zoidberg

標準的な方法は、returnステートメントの前のcin.get()です。

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World";
    cin.get();
    return 0;
}
40
Gordon Wilson

return行にブレークポイントを配置します。

デバッガで実行していますか?

24
Sam Harwell

別のオプションは使用することです

#include <process.h>
system("pause");

これはWindowsでのみ機能するため、あまり移植性がありませんが、自動的に印刷されます

何かキーを押すと続行します...

17
Marcos Marin

メイクファイルプロジェクトの場合、Visual Studioのバグ(少なくともバージョン2012まで存在するため、2013年はまだテストしていません)により、受け入れられたソリューションは失敗します。このバグの詳細は こちら です。

Makefileプロジェクトでプログラムの終了後にコンソールを一時停止するには、次の手順を実行します(2010〜2012以外のバージョンでは異なる場合があります)。

1)/SUBSYSTEM:CONSOLEをリ​​ンカーに渡します。 -EDIT:以下を参照してください。

2)テキストエディターでプロジェクトファイル(.vcxproj)を開きます。

3)ルート<project>タグ内に、次を挿入します。

<ItemDefinitionGroup>
  <Link>
    <SubSystem>Console</SubSystem>
  </Link>
</ItemDefinitionGroup>

4)プロジェクトをソリューションにリロードします。

5)デバッグせずにプログラムを実行します(CTRL + F5)。

編集:

以下の私のコメントによると、リンカーオプション/SUBSYSTEM:CONSOLEの設定は、実際にはメイクファイルプロジェクトには関係ありません(MSVC以外のコンパイラを使用している場合は、必ずしも可能でさえありません)。重要なのは、上記の手順3に従って、設定が.vcxprojファイルに追加されることだけです。

7
JBentley

コンソールウィンドウが閉じないようにするには、returnステートメントの直前にcin.get();またはcin.ignore();を使用できます。

4
CMS

mainの最後の中括弧にブレークポイントを置くだけです。

    int main () {
       //...your code...
       return 0;
    } //<- breakpoint here

デバッグなしで実行する必要はありません。また、ブレークポイントに到達する前にデストラクタを実行するため、これらのデストラクタに出力されたメッセージがある場合はそれらを確認できます。

4
Juan Castano

_tmainメソッドの閉じ括弧にブレークポイントを追加するだけです。これは簡単な方法です。さらに、デバッグするためにコードを追加する必要はありません。

3
Odys

私の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を含める必要があります

2
Arnav Borborah

次のように0を返す前に、コードの最後にsystem( "pause")を追加するだけです

#include <stdlib.h>

int main()
{
    //some code goes here
    system("pause")
    return 0;
}
2
user6041670

main()の終了中括弧にブレークポイントを配置します。複数のreturnステートメントがあってもトリップします。唯一の欠点は、exit()への呼び出しがキャッチされないことです。

デバッグしていない場合は、Zoidbergの答えのアドバイスに従って、プログラムを開始してください。 Ctrl+F5 ただの代わりに F5

2
Chad

#include <conio.h>を含めてから、return 0;行の直前にgetch();を追加します。とにかく学校で学んだことです。ここで述べた方法は、私が見るものとはまったく異なります。

1
Amruth Pillai

cin.get()、またはsystem("PAUSE")return(0);を使用できるとは聞いていません

1
Denchik

同じ問題がありました。 returnステートメントの直前に_getch()を使用しています。できます。

1
Martin

別のオプション:

#ifdef _WIN32
#define MAINRET system("pause");return 0
#else
#define MAINRET return 0
#endif

主に:

int main(int argc, char* argv[]) {
    MAINRET;
}
0
chen_767
int main()
{
    //...
    getchar();
    return 0;
}
0
gonnavis

コードを変更せずに実行が停止する方法に関係なく、コマンドウィンドウを開いたままにする方法を次に示します。

Visual Studioで、-プロジェクトプロパティページ-> デバッグを開きます。

Commandの場合、$(ComSpec)を入力します

コマンド引数の場合、/k $(TargetPath)を入力します。独自のアプリケーションに引数を追加します。

これでF5またはCtrl-F5が実行されますWindows/System32/cmd.exe新しいウィンドウで/ k実行完了後、コマンドプロンプトが開いたままになるようにします。

欠点は、ブレークポイントで実行が停止しないことです。

0

実際、実際のソリューションはプロジェクトテンプレート自体の選択です。古いVSでWin32コンソールアプリケーションを選択するか、最初にプロジェクト名を入力してから、Windowsデスクトップウィザードをダブルクリックしてから、Win32コンソールアプリケーションを選択する必要があります。次に、この時点で空のプロジェクトを選択します。これにより、追加の停止ポイントとホールドコードを追加することなく、元の質問者が本当に望んでいたことを可能にします。私もこの問題を経験しました。答えはMSDNサイトにもあります。

0
user9416431

同じ問題がありました。私のアプリケーションには複数のexit()ポイントがあり、それが正確に終了する場所を知る方法がありませんでした。

atexit(system("pause"));

または

atexit(cin.get());

この方法では、プログラムのどこで終了しても停止します。

0

(一部のオプションは異なる名前で呼び出される場合があります。英語版は使用していません)

「空のプロジェクト」オプションでプロジェクトを作成したときに、「空のプロジェクト」ではなく「Win32-consoleアプリケーション」としてプロジェクトを作成すると、同じ問題が発生しました。ここでポップアップするダイアログで、「続行」を押し、その後、「空のプロジェクト」オプションをチェックして確認を押します。その後、CTRL + F5は自動的に閉じないコンソールを開きます。

0
Blechdose