-PR-
解決
済み

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

  • 暇なときにでも
  • 質問No.57705
  • 閲覧数1407
  • ありがとう数10
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 88% (22/25)

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

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

  • 回答No.6
レベル12

ベストアンサー率 31% (161/506)

getch()を使えば勝手にキー入力待ちになりますので、
質問の答えとしてはkbhit()は不要です。

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

_getch();

だけでうまくいくと思います。
お礼コメント
shenlong

お礼率 88% (22/25)

ありがとうございますKOH_daさん。
かなり悩んでやっとあそこに辿り着いたんですが、少し?違ってたみたいです(^_^;)
初めはキー入力を待つためにscanfでいろいろ試してたんですが全くもって
うまくいかなかったんで質問して正解でした。

>昔はキーボードでゲームをやろうとすると、
>kbhit()とgetch()を組み合わせて使っていました。
頑張っていつかゲームみたいな物を作ってみたいと思います。
またよろしくお願いします。
投稿日時 - 2001-03-31 04:04:49
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル12

ベストアンサー率 31% (161/506)

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

で、答えなんですが、
プログラムを終わらせなければ、窓は閉じないはずなので、
getch()でキー入力を待つようなプログラムを組めばいいと思います。
補足コメント
shenlong

お礼率 88% (22/25)

とりあえず、

   while( !_kbhit() ){}
_getch();

と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。
投稿日時 - 2001-03-30 20:15:06
お礼コメント
shenlong

お礼率 88% (22/25)

ありがとうございます、KOH_daさん。

2,600円+税は今の私には手が出せません(T_T)
こういう本は何故かまるで嫌がらせのように高いですね。

getch()ですか・・・使い方がいまいちわかりませんが調べて見ます。
ありがとうございました。
投稿日時 - 2001-03-30 17:20:36


  • 回答No.2
レベル10

ベストアンサー率 28% (34/119)

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

お礼率 88% (22/25)

とりあえず、

   while( !_kbhit() ){}
_getch();

と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。
投稿日時 - 2001-03-30 20:23:33
お礼コメント
shenlong

お礼率 88% (22/25)

ありがとうございます、haru-pさん。

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

またよろしくお願いします。
投稿日時 - 2001-03-30 17:28:44
  • 回答No.3
レベル13

ベストアンサー率 37% (570/1525)

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

kbhit()または_kbhit()で「キーを押した」事がわかります。
キー入力が確認されたらgetch()または_getch()で入力文字を取りこみます。

アプリケーション終了時なら文字を取りこむ必要が無いのでkbhit()で入力待ちすれば良いでしょう。
補足コメント
shenlong

お礼率 88% (22/25)

とりあえず、

   while( !_kbhit() ){}
_getch();

と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。
投稿日時 - 2001-03-30 20:25:02
お礼コメント
shenlong

お礼率 88% (22/25)

ありがとうございます、toysmithさん。

>コンソールアプリケーション(Windows上の)に依存する方法です。
>移植性はありませんので御注意ください。
コンソールアプリケーションでしか使えないと言う事でしょうか?

とにかく頑張ってやってみます。getch()で入力文字を取り込めばprintfなどで
表示させられるということですね。ありがとうございました。
結果を報告したいので締め切りはもう少し待ってください。
投稿日時 - 2001-03-30 17:38:25
  • 回答No.4
レベル10

ベストアンサー率 28% (34/119)

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

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

お礼率 88% (22/25)

haru-pさんありがとうございます。
Helpに_kbhit()がキー入力みたいな事が書かれていたので必死の思いで
これに辿り着いたんですが・・・。

while( !_kbhit() ){} ←何かのキーを押すまでループ
_getch(); ←キー情報を開放
のような感じで一人で納得してました。
実はいらなかったんですね、while( !_kbhit() ){}
これから書き直そうと思います。
またよろしくお願いします。
投稿日時 - 2001-03-30 22:25:36
  • 回答No.5
レベル13

ベストアンサー率 37% (570/1525)

えっと、kbhit()を使う理由なのですが…。 質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。 純粋に「キー入力があったこと」を報告する関数がkbhit()で入力した値を取りこむ関数がgetch()です。 > コンソールアプリケーションでしか使えないと言う事でしょうか? getch()、kbhit()共にANSI標準ライブラリ関数ではないのでWindow ...続きを読む
えっと、kbhit()を使う理由なのですが…。
質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。
純粋に「キー入力があったこと」を報告する関数がkbhit()で入力した値を取りこむ関数がgetch()です。


> コンソールアプリケーションでしか使えないと言う事でしょうか?
getch()、kbhit()共にANSI標準ライブラリ関数ではないのでWindowsのMS-DOSプロンプト(WindowsNTY/200のコマンドプロンプト)とMS-DOSのみで利用可能と考えた方が良いでしょう。
お礼コメント
shenlong

お礼率 88% (22/25)

toysmithさん、ありがとうございます。
>質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。
はい、その通りです。特に入力文字を表示させるまでは考えてませんでした。
Helpにもtoysmithさんと同じことが書かれていました。
結果、ああ言う風になったんですが・・・初心者には難しいですね(^_^;)
とりあえず、ここで教えていただいた事を頑張ってやってみます!
勉強になりました。
またよろしくお願いします。
投稿日時 - 2001-03-31 03:49:21
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ