• ベストアンサー

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

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

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

  • ベストアンサー
  • symgt
  • ベストアンサー率56% (68/120)
回答No.3

select()でstdinを監視すれば可能だと思います。 select()のマニュアル(man select)にサンプルがあるので試してみてください。

taurus4
質問者

補足

使えそうです、いろいろいじってみたいと思います。ありがとうございました。

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

その他の回答 (2)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

ずい分昔、ioctl()関数で制御した覚えがあるのですが、 最近やっていないので、自信なしです。 man ioctl でそれらしい情報が拾えないか見て下さい。 あとは、system("stty raw"); ってのはダメかな?

taurus4
質問者

補足

すみませんioctl()の使い方もよく分かりませんし、system("stty raw"); っていうのは何ですか? ノンブロッキングでキーボードの入力を処理するのって標準入出力関数に用意されていないんですか?ほかの方でも構いませんので、素人なので簡単な説明でお願いします。

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

ヘッダファイル conio.h に int kbhit(void); と言う定義はありませんでしたか?

taurus4
質問者

補足

その前に /usr 以下でfindしたんですがconio.hというファイルがありませんでした。

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

関連するQ&A

  • C言語 kEYの空読み

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

  • キーの入力がおかしい

    キーの入力がおかしくなりました。 どういうわけか、一番上の段のキー(Ex:「あ」や「う」)だけがきちんと入力することができません(←「あ」や「う」はコピペで入力してます) ローマ字入力で設定しているので、通常それらのキーを押せば平仮名が出てくるはずなのですが、全角英数で入力したように数字が出てきてしまいます。 どこか設定をいじってしまったのでしょうか? どうしたら症状が改善されるか、どなたか教えてください。 ちなみに「あいうえお」を普通に打ちますと、「3いうえお」になるような具合です。

  • キー入力が変に・・・。ファンションを押しながらじゃないと正しく入力できません。。

    教えてください。。 ノートPCに、 USB接続で外付けのキーボード(他メーカ)を一度接続して使用した後、 そのキーボードを取り外し、 再びノートPCのキーボードを通常通り使用しようとしたところ、 一部のキーでファンクションを押しながら入力しないと、 通常のキー入力ができない状態になってしまいました。 (例えば、uiojklが、456123になってしまう。) 元のキー入力に戻したいのですが、どうしたらいいんでしょうか?。。 教えてください。。 ちょっとPCがあまり得意ではなく、 なるべく具体的な操作方法まで教えていただけるととてもうれしいです。 すみません。。 ※ちなみに使用しているPCは、「パナソニック レッツノート CF-R3」です。

  • C言語 空白の行(改行のみ)が入力されたらプログラムを終了する処理

    コンソールでうごくCUIプログラムを作っています。 そのとき文字列を入力してEnterキーを押すと、その文字列を格納したり何らかの処理をします。問題は何も入力せずにEnterキーを押された場合、プログラムを終了するという処理です。 どのようなソースになるのでしょうか?

  • 1キー入力で2キー分入力できるソフトってありませんか?

    1キー入力で2キー分入力できるソフト探しています。 F1キーを押した場合、F1と他のキー(F2など)を押した状態の ソフトがありましたら教えてください。

  • C言語のファイル処理について

    環境 OS:Windows VISTA Ultimate コンパイラ:Borland C++ Compiler 5.5 Cの基礎的な勉強をしています。2つほど質問があります。 1つ目は、ファイル処理の勉強としてプログラムを作っているのですがファイルが上手く開けません。プログラムとしてはファイルを開いて、ファイル内に記述されている数値を取り出し、計算を行う簡単なものを作っています。ソースは以下のものになります。 #define N 256 int file_read(char filename[] , int count[]) { int m; FILE *fp; fp=fopen(filename,"r"); if(fp==NULL) { /* オープン失敗 */ printf("Not Found File\n"); return -1; /* 戻り値-1 */ } while((m = fgetc(fp)) != EOF) { 読み取った数値配列に格納する処理 } fclose(fp); return 0; } int operation(int count[]) { 計算処理 return 0; } int main(void) { int *count[N]; char *filename[256]; memset(count, 0, sizeof(count)); /* 変数・配列初期化 */ printf("Please Input Filename:"); fgets(filename, sizeof(filename), stdin ); if(file_read(filename,count) != -1) operation(count); return 0; }  バッファオーバーランの事を考え、fgetsによるキー入力にしたのですがファイルオープン失敗になってしまいます。fgetsのあと、変数filenameの中身を確認したところ、キー入力した文字はきちんと代入されていました。オープンするファイルはきちんとあるのですが・・。  fgetsをscanfに変えた場合は上手くいくので書式指定をしてscanfを使えばいいのでしょうが、なぜfgetsで上手くいかないでしょうか? 2つ目はgetchar()とfgets()に関してです。 while((c = getchar()) != EOF) { . .処理 . fgets(変数, sizeof(変数), stdin ); . .処理 . } とした場合、fgetsの処理が無視されてしまいます。 これはどういったことが原因なのでしょうか。 ご教授、お願いいたします。

  • c言語

    #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(); } while(c!=\'e\')をwhile(c>0)にして実行したい場合はcharをintにかえて、scanfを使わなければならないのはわかりますが、どこを変えればよいか分かりません。ちなみに、while(c>0)に変えた場合に、正の数を入力した後に、「次の数を入力してください」という文を表示してからくりかえす方法をおしえてください。

  • ループからの抜け出し方

    VC++でMFCで作っています。 ある処理を継続的に実行させ、何らかのキー入力で通常の待機状態に戻すにはどうしたらいいでしょうか。

  • C# DateTimePicker をキー入力でDropDownしたい

    はじめまして。 Vs2005で開発しています。 DateTimePickerでキー入力でDropDownしたいのですが、 うまくいきません。 現在の処理は、DateTimePickerの派生クラスを作成して、 KeyUpイベント内で、Spaceキーがクリックされた場合に、 OnDropDownを呼び出しています。 ソースコードは明日にでも、掲載します。 よろしくお願いします。

  • 特定のキーのみ入力できなくなった

    何かのキーを押してしまったのか会社のPCのキー入力で、 WINDOWSキーが押されっぱなしみたいな状態になっていました。 「d」を押すとwindouws+dみたいに最小化したり、「r」を押すとwindouws+rみたいにファイル実行が立ち上がったりしました。 パソコンを再起動しても直りませんでしたので、ALTやSHIFTやWINDOWSキーを連打してたりしたら、いつのまにか治っていました。 原因が不明なので、どのような設定をしてしまったのでしょうか。 またその後、エクセルの入力だけ「t h c v」のキーを押しても何も入力できませんでした。 SHIFTキーを押しながら「t h c v」を押すとなんとか大文字ですが入力できました。 こちらはまだ治っていません。 このような状態は初めてですので、修正方法を教えていただけますでしょうか。

このQ&Aのポイント
  • クリーニングを何度も行っても、黒インクのカスレとカラーの変色が改善しない問題についてお困りの方へ。
  • Windows10で無線LAN接続しているMFC-J6983CDWの印刷結果が良くならない問題について解決方法をご紹介します。
  • ブラザー製品の印刷トラブルにお困りの方へ。黒インクのカスレやカラーの変色が改善しない場合の対処法を解説します。
回答を見る