• 締切済み

C言語 kEYの空読み

C言語でプログラムを組んでいます。 あるひとつの処理を連続で行い、何かKEYボタンをおすとプログラムが終了するというプログラム なのですが? while(kbhit()) getch(); while(1) { ~~~~~~      if(kbhit()) { getch(); return(1); } }while(c==0); という内容ですが、     if(kbhit())のあとの文面は、KEYが押されると(1)が返されエラーになり処理が中断される     ということはわかりますが、 冒頭でのこの部分while(kbhit())                getch(); は、どういった意図の分なのでしょうか?

みんなの回答

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.3

キーバッファのクリアでは?

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

kbhit や getch の「意味」は日本語としておかしかったです. これらの「機能」とすべきでした. ごめんなさい. ということで改めて: kbhit や getch の機能を調べてください.

bonborisan22
質問者

補足

ご回答ありがとうございます、調べました。 kbhitは、標準入力にデータがあるか調べ,デーがあれば 1 , データがなければ 0 を返す。 とあるのですが、標準入力というのは、入力keyを押したかどうかということでしょうか? getch,エコーなしで標準入力から 1 文字読み込み,その文字コード を整数で返す。 とあるのですが、エコーとは何のことでしょうか? while(kbhit()) getch(); while(1) { ~~~~~~      if(kbhit()) { getch(); return(1); } }while(c==0); それと、試しに冒頭のwhile(kbhit())           getch(); この部分を抜いて、コンパイルしたところデータが表示されなくなりました。 私の考えが間違っていると思うのですが、 if(kbhit()) { getch(); return(1); } この部分だけでも、データを表示し、もしKEY入力があれば終了するというふうになると思う のですが、皆目見当つかないです。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

while, kbhit, getch の意味は分かりますか?

bonborisan22
質問者

補足

はい、whileの意味はわかります。 継続条件式が正の間ループ処理を行うという考え方で間違いないでしょうか? kbhitとgetchの意味と、2箇所に分けてこの文面を入れている理由が分かりません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 何を行っているのか分かりません(C言語)

    #include <stdio.h> #include <stdlib.h> #include <conio.h> enum transport {car, train, airplane, bus} tp; char trans[][20] = { "車", "電車", "飛行機", "バス" }; int main(void) { printf("キーを押して移動手段を選んでください: "); /* プログラムを実行するたびに新しい乱数を生成する */ while(!kbhit()) rand(); getch(); /* 文字を読み込んで廃棄する */ tp = rand() % 4; printf("%s", trans[tp]); return 0; } 【質問】 上記のプログラムで while(!kbhit()) rand(); getch(); のコードが全体的に何を行っているのか分かりません。 1.「while(!kbhit())」でキーが押されたら繰り返しを終了する。 2.繰り返しが終了するまで「rand();」で乱数を発生し続ける。 ぐらいしか分かりません。 「文字を読み込んで廃棄する」コメントはどういう事なのか分かりません。 教えて頂けないでしょうか?

  • waitせずにキー入力があった場合のみ処理をさせたい(C言語)

    getch()だと、そこでいったん待機状態になりますが、何もキー入力が無かった場合通常通り処理が続行され、もしキー入力があった場合のみ、何か処理をさせたいって時はどうすればいいでしょうか? ちなみにヘッダーファイルが見つからなくて、kbhit()が使えませんでした。

  • C言語での方向キー入力判定

    C言語でキーの入力判定をするプログラムを作ってい ます。下の例だとeやエンターを押したときは認識できる のに、方向キー↑を押したときはなぜか無反応です。 コンパイラはボーランドでOSはXPでコンパイルした のですが、何がいけなかったのでしょうか? #include <stdio.h> #include <conio.h> #include <windows.h> void check(void){ int key; key = getch(); switch (key){ case 'e': puts("e"); break; case VK_RETURN: puts("ENTER"); break; case VK_UP: puts("UP"); break; } } int main(void) { while(1){ check(); } return 0; }

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語の課題で分からないところがあり、質問しに来ました。 ユーザから数を受けて、そこまでのフィボナッチ数列を表示させるというプログラムです。 下のソースコード(でいいんですよね?)は正しいやつです。 for文を使って、繰り返しの作業を行うことに成功しましたが、doとwhileに書き換える作業がうまくできません。 どなたか助けてください。 #include<stdio.h> fib(int n) { if(n == 1)return(1); else{ if(n == 2) return (1); else return fib(n-1) + fib(n-2); } } main() { int n, i ; printf("INPUT the number. : "); scanf("%d",&n); for(i=1; i<=n; i++){ printf("F%d = %d\n",i, fib(i)); } }

  • C言語でタイミングを合わせるゲームを作っているのですが・・・。【getch()】

    C言語で壁に向かって衝突していくボールをタイミングよくスペースキーを押すことで打ち返すプログラムを作っています(多分実行しないと分かりにくいかも)。 そこでキーの入力にgetch()関数を使っていますが、これだと何かキーが入力されるまで永遠と待ち続けてしまうので、タイミングが100%合ってしまいます。 そこで指定された秒数だけキーの入力を受け付けるような方法を探しているのですが、そのようなものはあるのでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h> int main(void){ int key=0,ballichi=0,i,i2; system("cls");//画面の初期化 for(i=0;i<10;i++){ for(i2=0;i2<10;i2++){ if(ballichi==i2){printf(" o"); }else{printf(" ");} } printf("|壁"); if(i==9){ key = getch(); //キーから一文字入力 switch (key) { /* キー入力チェック */ case ' ': printf("スペースキーが押されました"); break; } } Sleep(500); ballichi++; system("cls"); } return 0; }

  • C言語について…

    C言語についてですが… while文とdo while文はどう違うんですか?プログラムの書き方が違うくらいでしょうか? またwhile文とdo while文のどちらかしか使えない場合、どちらを使いますか?理由もお願いします。

  • C言語プログラム

    したのプログラムでgetch()の代わりにscanf()を使って、入力した数が負なら終了、正なら"次の数を入力してください"と表示してループを続けるプログラムを作りたいのですが、どこを変えればよいのですか? #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); }

  • C言語のエラーが無くなりません

    はじめまして。 現在C言語でプログラムを組んでいるのですが、不明な点がありますので質問させて頂きます。 while文とかif文を使って、プログラムを書き終える時に当然いくつかの「}」を使って締めます。そのとき、「}」が自動でだんだん左寄せになってくのですが、自動で左寄せにならない場合、原因は何でしょうか。 以上です。何卒ご教授の方よろしくお願いいたします。

  • 0x8, スペース, 0x8をプログラムで組むと

    『scanfを使わずに_getch()でキーボードからファイル名を入力していき、入力した文字をprintfで表示する流れについて質問です。 表示された文字をバックスペースで消していっても打ち込んだ文字は消えないですよね? 間違ったファイル名を入力してしまった際に文字が残っているので、正しく入力し直しても間違ったファイル名となってします。 一度打った文字を消す方法はありますでしょうか? 』 以前このような質問をさせていただき、_getch()で得た文字のキーボード上での削除の仕方は分かりました。 今度はそのやり方をプログラムで作るとしたら、どう組んでいけば良いのか教えて頂けないでしょうか。 できればそのプログラムを教えて頂けたら嬉しいです。 今現在書いてるプログラムのgetchを使っている部分です。 ファイルがオープンできたら別の処理に移行しますが、その関数は長くなるので省略しています。 #include <stdio.h> #include <conio.h> int main() { int key; int i; char file_name[256] = { 0 }; FILE *fp; errno_t e; while(1) { i = 0; // エンタキーが押されるまで入力を続ける do { printf("%c", key); file_name[i] = key; key = _getch(); i++; } while(key != 0x0d); printf("\n"); if(e = fopen_s(&fp, file_name, "rb") != 0) { printf("ファイルが存在しません\n"); return 0; } else { // 成功したらプログラムの処理をする関数に移行 return 1; } } }

  • プログラミングで質問です。言語はC++です。

    いま、 While文でループし、Enterキーを おすとループから抜けます。 そこで、上矢印キー↑を押すと マウスカーソルがそれに応じて動くようなプログラムを while文でループさせたいのですが やり方がわかりません。 途中まで書いてみたのですが動きません。 詳しく教えていただけると嬉しいです。 #include <stdio.h> #include <windows.h> #include <Windows.h> int main( void ) { printf("roop in\n"); POINT po; while(1){ po.x=0; po.y=0; if( GetAsyncKeyState(VK_RETURN)) break; if(GetAsyncKeyState(VK_UP)&0x8000 <0) po.x+=7; Sleep(500); } printf("roop out\n"); return 0; }