• ベストアンサー

キーボードを押すまで処理を中断させる方法

VC++6.0を(初心者なのに)無謀にも購入したんですが、 クラスというのが全く理解できなかったのでコンソールアプリケーションから 作って見る事にしました。で、とりあえず、しょぼいのが出来たんですが キーボードを押すまで処理を中断させる方法と、処理が終わった後キーボードを押すまでウインドウを閉じないようにする方法がわかりません。 初歩的な事でしょうが、初心者の私にはどこをどう調べたら良いかわからず困っています。どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.6

getch()を使えば勝手にキー入力待ちになりますので、 質問の答えとしてはkbhit()は不要です。 昔はキーボードでゲームをやろうとすると、 kbhit()とgetch()を組み合わせて使っていました。 アルタイムキー入力をやるために、 kbhit()が必要だったわけですが、 今回の場合はキー入力を待ちたいわけですから、 単に... _getch(); だけでうまくいくと思います。

shenlong
質問者

お礼

ありがとうございますKOH_daさん。 かなり悩んでやっとあそこに辿り着いたんですが、少し?違ってたみたいです(^_^;) 初めはキー入力を待つためにscanfでいろいろ試してたんですが全くもって うまくいかなかったんで質問して正解でした。 >昔はキーボードでゲームをやろうとすると、 >kbhit()とgetch()を組み合わせて使っていました。 頑張っていつかゲームみたいな物を作ってみたいと思います。 またよろしくお願いします。

その他の回答 (5)

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.5

えっと、kbhit()を使う理由なのですが…。 質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。 純粋に「キー入力があったこと」を報告する関数がkbhit()で入力した値を取りこむ関数がgetch()です。 > コンソールアプリケーションでしか使えないと言う事でしょうか? getch()、kbhit()共にANSI標準ライブラリ関数ではないのでWindowsのMS-DOSプロンプト(WindowsNTY/200のコマンドプロンプト)とMS-DOSのみで利用可能と考えた方が良いでしょう。

shenlong
質問者

お礼

toysmithさん、ありがとうございます。 >質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。 はい、その通りです。特に入力文字を表示させるまでは考えてませんでした。 Helpにもtoysmithさんと同じことが書かれていました。 結果、ああ言う風になったんですが・・・初心者には難しいですね(^_^;) とりあえず、ここで教えていただいた事を頑張ってやってみます! 勉強になりました。 またよろしくお願いします。

  • haru-p
  • ベストアンサー率28% (34/119)
回答No.4

while( !_kbhit() ){} _getch(); 上の while(~){} は不要ですよ。 _getch() だけでプログラムは停止します。 _getch() の使い方はコンソールアプリで使うキー入力なのでこれで OK です。

shenlong
質問者

お礼

haru-pさんありがとうございます。 Helpに_kbhit()がキー入力みたいな事が書かれていたので必死の思いで これに辿り着いたんですが・・・。 while( !_kbhit() ){} ←何かのキーを押すまでループ _getch(); ←キー情報を開放 のような感じで一人で納得してました。 実はいらなかったんですね、while( !_kbhit() ){} これから書き直そうと思います。 またよろしくお願いします。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.3

コンソールアプリケーション(Windows上の)に依存する方法です。 移植性はありませんので御注意ください。 kbhit()または_kbhit()で「キーを押した」事がわかります。 キー入力が確認されたらgetch()または_getch()で入力文字を取りこみます。 アプリケーション終了時なら文字を取りこむ必要が無いのでkbhit()で入力待ちすれば良いでしょう。

shenlong
質問者

お礼

ありがとうございます、toysmithさん。 >コンソールアプリケーション(Windows上の)に依存する方法です。 >移植性はありませんので御注意ください。 コンソールアプリケーションでしか使えないと言う事でしょうか? とにかく頑張ってやってみます。getch()で入力文字を取り込めばprintfなどで 表示させられるということですね。ありがとうございました。 結果を報告したいので締め切りはもう少し待ってください。

shenlong
質問者

補足

とりあえず、    while( !_kbhit() ){} _getch(); と書いたら中断することが出来ました。 何か使い方が間違ってるような気がするんですが、 もっといい方法があれば教えてもらえないでしょうか? よろしくお願いします。

  • haru-p
  • ベストアンサー率28% (34/119)
回答No.2

「キーボードを押すまでウインドウを閉じないように」は、 メニュー [ビルド]→[アクティブな構成の設定]→[Win32 Debug]を選択して [OK] ボタンを押しビルドします。 そして、プログラムが閉じてしまいそうな場所(ソース上)へカーソルを移動させて [F9] キーを押してみて下さい。 左側に赤い●が付くでしょ。 [F5] キーを押してプログラムを実行させると、その●印のところで処理が中断されます。 例えばコンソールアプリであれば main の一番最後の return に●を付けて下さい。 <<プログラマが日常茶飯事に使う手法です>>

shenlong
質問者

お礼

ありがとうございます、haru-pさん。 こんな便利な方法があったとは・・・試して見ます。 一応、Helpなどある程度目を通したんですが、これまた嫌がらせの様に 専門用語の嵐でして理解しきれませんでした。 使い勝手もよろしくないような気がします。なれれば良いのかもしれませんが・・・。 またよろしくお願いします。

shenlong
質問者

補足

とりあえず、    while( !_kbhit() ){} _getch(); と書いたら中断することが出来ました。 何か使い方が間違ってるような気がするんですが、 もっといい方法があれば教えてもらえないでしょうか? よろしくお願いします。

  • KOH_da
  • ベストアンサー率31% (161/506)
回答No.1

私と同じレベルですね(笑)。 翔泳社から発売になっている本がわかりやすいと思います。 VisualC++(1)はじめてのWindowsプログラミング 山本 信雄著、2,600円+税です。 続編があと2冊ありますが、極めて退屈な本なので、 (1)だけ買うのが正解だと思います。 で、答えなんですが、 プログラムを終わらせなければ、窓は閉じないはずなので、 getch()でキー入力を待つようなプログラムを組めばいいと思います。

shenlong
質問者

お礼

ありがとうございます、KOH_daさん。 2,600円+税は今の私には手が出せません(T_T) こういう本は何故かまるで嫌がらせのように高いですね。 getch()ですか・・・使い方がいまいちわかりませんが調べて見ます。 ありがとうございました。

shenlong
質問者

補足

とりあえず、    while( !_kbhit() ){} _getch(); と書いたら中断することが出来ました。 何か使い方が間違ってるような気がするんですが、 もっといい方法があれば教えてもらえないでしょうか? よろしくお願いします。

関連するQ&A