
No.6ベストアンサー
- 回答日時:
getch()を使えば勝手にキー入力待ちになりますので、
質問の答えとしてはkbhit()は不要です。
昔はキーボードでゲームをやろうとすると、
kbhit()とgetch()を組み合わせて使っていました。
アルタイムキー入力をやるために、
kbhit()が必要だったわけですが、
今回の場合はキー入力を待ちたいわけですから、
単に...
_getch();
だけでうまくいくと思います。
ありがとうございますKOH_daさん。
かなり悩んでやっとあそこに辿り着いたんですが、少し?違ってたみたいです(^_^;)
初めはキー入力を待つためにscanfでいろいろ試してたんですが全くもって
うまくいかなかったんで質問して正解でした。
>昔はキーボードでゲームをやろうとすると、
>kbhit()とgetch()を組み合わせて使っていました。
頑張っていつかゲームみたいな物を作ってみたいと思います。
またよろしくお願いします。
No.5
- 回答日時:
えっと、kbhit()を使う理由なのですが…。
質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。
純粋に「キー入力があったこと」を報告する関数がkbhit()で入力した値を取りこむ関数がgetch()です。
> コンソールアプリケーションでしか使えないと言う事でしょうか?
getch()、kbhit()共にANSI標準ライブラリ関数ではないのでWindowsのMS-DOSプロンプト(WindowsNTY/200のコマンドプロンプト)とMS-DOSのみで利用可能と考えた方が良いでしょう。
toysmithさん、ありがとうございます。
>質問文に“キーを押した時”とあったので「入力文字は必要無い」と判断していました。
はい、その通りです。特に入力文字を表示させるまでは考えてませんでした。
Helpにもtoysmithさんと同じことが書かれていました。
結果、ああ言う風になったんですが・・・初心者には難しいですね(^_^;)
とりあえず、ここで教えていただいた事を頑張ってやってみます!
勉強になりました。
またよろしくお願いします。
No.4
- 回答日時:
while( !_kbhit() ){}
_getch();
上の while(~){} は不要ですよ。
_getch() だけでプログラムは停止します。
_getch() の使い方はコンソールアプリで使うキー入力なのでこれで OK です。
haru-pさんありがとうございます。
Helpに_kbhit()がキー入力みたいな事が書かれていたので必死の思いで
これに辿り着いたんですが・・・。
while( !_kbhit() ){} ←何かのキーを押すまでループ
_getch(); ←キー情報を開放
のような感じで一人で納得してました。
実はいらなかったんですね、while( !_kbhit() ){}
これから書き直そうと思います。
またよろしくお願いします。
No.3
- 回答日時:
コンソールアプリケーション(Windows上の)に依存する方法です。
移植性はありませんので御注意ください。
kbhit()または_kbhit()で「キーを押した」事がわかります。
キー入力が確認されたらgetch()または_getch()で入力文字を取りこみます。
アプリケーション終了時なら文字を取りこむ必要が無いのでkbhit()で入力待ちすれば良いでしょう。
この回答への補足
とりあえず、
while( !_kbhit() ){}
_getch();
と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。
ありがとうございます、toysmithさん。
>コンソールアプリケーション(Windows上の)に依存する方法です。
>移植性はありませんので御注意ください。
コンソールアプリケーションでしか使えないと言う事でしょうか?
とにかく頑張ってやってみます。getch()で入力文字を取り込めばprintfなどで
表示させられるということですね。ありがとうございました。
結果を報告したいので締め切りはもう少し待ってください。
No.2
- 回答日時:
「キーボードを押すまでウインドウを閉じないように」は、
メニュー [ビルド]→[アクティブな構成の設定]→[Win32 Debug]を選択して [OK] ボタンを押しビルドします。
そして、プログラムが閉じてしまいそうな場所(ソース上)へカーソルを移動させて [F9] キーを押してみて下さい。
左側に赤い●が付くでしょ。
[F5] キーを押してプログラムを実行させると、その●印のところで処理が中断されます。
例えばコンソールアプリであれば main の一番最後の return に●を付けて下さい。
<<プログラマが日常茶飯事に使う手法です>>
この回答への補足
とりあえず、
while( !_kbhit() ){}
_getch();
と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。
ありがとうございます、haru-pさん。
こんな便利な方法があったとは・・・試して見ます。
一応、Helpなどある程度目を通したんですが、これまた嫌がらせの様に
専門用語の嵐でして理解しきれませんでした。
使い勝手もよろしくないような気がします。なれれば良いのかもしれませんが・・・。
またよろしくお願いします。
No.1
- 回答日時:
私と同じレベルですね(笑)。
翔泳社から発売になっている本がわかりやすいと思います。
VisualC++(1)はじめてのWindowsプログラミング
山本 信雄著、2,600円+税です。
続編があと2冊ありますが、極めて退屈な本なので、
(1)だけ買うのが正解だと思います。
で、答えなんですが、
プログラムを終わらせなければ、窓は閉じないはずなので、
getch()でキー入力を待つようなプログラムを組めばいいと思います。
この回答への補足
とりあえず、
while( !_kbhit() ){}
_getch();
と書いたら中断することが出来ました。
何か使い方が間違ってるような気がするんですが、
もっといい方法があれば教えてもらえないでしょうか?
よろしくお願いします。
ありがとうございます、KOH_daさん。
2,600円+税は今の私には手が出せません(T_T)
こういう本は何故かまるで嫌がらせのように高いですね。
getch()ですか・・・使い方がいまいちわかりませんが調べて見ます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のプログラミングですが、
-
C言語の整数の判別
-
Userformの入力順序をタブオー...
-
入力する数字のサイズ制限について
-
コンソールアプリの入力時に改...
-
正負を反転させて出力するプロ...
-
fgetsとループ処理
-
Javaについて質問です。 勉強し...
-
コンボボックスで日本語入力を...
-
C言語でタイミングを合わせるゲ...
-
WindowsでEOF
-
Eclipseでコマンドラインを入力...
-
数字以外が入力されたらエラー...
-
ダメだ・・・分からない。while...
-
最早開始時間と最遅完了時刻を...
-
C言語 エラーの原因がわからな...
-
信頼区間の1.96や1.65ってどこ...
-
Enterキーを押されたら次の処理...
-
プログラムでの数字につく”f”の...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
コマンドプロンプトからのEOFの...
-
4桁の数字以外を入力したらエラ...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
"scanf"でエンターで改行させな...
-
cout関数を使っているのですが...
-
プログラミングの問題です 「金...
-
scanf関数について
-
Userformの入力順序をタブオー...
-
C言語でgetchar();が上手く使え...
-
プログラムの実行時に'<'でリダ...
-
C言語初心者です。ファイルの読...
-
scanf が無視されます
-
実行結果の順番がおかしいんで...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報