稲枝の押入れ

いなえが適当なことを書いては、しまっておく場所

VisualStudioでコンソールプログラムを実行後、コンソール画面を消さない方法

調べた感じVS2010からどうも「空のプロジェクト」を作るとデフォの状態だとプログラムの実行が終わると自動でウィンドウが消えてしまう様になっているらしい。

最近はGUIの開発が多かったので知らなかったのだけれど、ちょっと試したいことがあって久々にコンソールプログラムを作って実行してみたら一瞬でウィンドウが消えて結果が全く見えなかった。

というわけで、それをどう直したらいいかを調べるのがかれこれ3回目くらいなので、大した分量もないのだが大まかに4つの方法を備忘録的に書いておく。

system("pause");

これはCもしくはC++を使っている場合に使える方法だが、まず、そもそも調べるのが面倒くさい時はsystem関数を使ってしまう。これは簡単に言うと文字列を受け取ってその文字列をコマンドプロンプトに打ち込んだのと同じような動きをしてくれる関数だ。

つまり、

system("pause");

と書くと、pauseコマンド(任意のキーを押すまで処理を中断するコマンド)が実行される。

これをプログラムの最後においておけば、処理が中断されてプログラムが終わらないのでウィンドウが消えなくなる(勿論キーを押すと終わってしまう)。

また、この関数を使うにはC言語なら<stdlib.h>C++なら<cstdlib>をインクルードする必要がある。ただ、<iostream><random>等を辿っていくとその中でそれらがインクルードされていたりするので、ユーザーが自らインクルードせずとも使える場合もある。

入力を待つ

CもしくはC++を使っている場合の方法その2。

Cなら

int hoge;
scanf("%d",&hoge);

C++なら

int hoge;
std::cin>>hoge;

などとして適当な変数に入力を入れるようにする。C言語なら<stdio.h>C++なら<iostream>のインクルードが必要。

ブレークポイント

3つめにもっと面倒くさい時、と言うか特にコードを汚したくない時はVSの機能であるブレークポイントを使ってしまう。これをプログラムの終わりのあたりに設定しておき、デバッグありで実行すれば、おそらくブレークポイントのところにプログラムが達した段階でVSの方に戻ってきてプログラムが一度止まる。ここで出力が確認できる。

ブレークポイントはコードの止めたい位置の左端のあたりをクリックするか、F9キーを押せば設定/解除が出来るはず。

ただし、ブレークポイントで止めた場合はプログラムの画面よりVSのコードの画面が全面に来てしまって、結局画面の出力結果が見辛くなってしまう可能性がある。

設定を変える

もしくはそもそも設定を変えることでこれを回避できる。少し長い間使うプロジェクトならこっちのほうが楽だ。これだとデバッグなし実行(Ctrl+F5)をした時に勝手にプログラムが終了するのを防げるようになる。

やり方は、

  1. ソリューションエクスプーラーで設定したいプロジェクトを右クリックしてプロパティを開く
  2. 左のボックスの中から、構成プロパティ/リンカ/システムを選ぶ
  3. 右のボックスから一番上のサブシステムコンソール(/SUBSYSTEM:CONSOLE)を選択

以上と言った感じ。そもそも何でデフォの設定変わったんですかね。