Linuxのgccでのプログラミングで、キーボードのどのキーが押されたのかを変数に代入したりして取得したりすることはできないでしょうか?
例えば、while分で永久ループを作っておいて、
while(1)
{
if(aのキーが押されている場合)
printf("A key is pushing!")
elseif(sのキーが押されている場合)
printf("B key is pushing!")
elseif(dのキーが押されている場合)
printf("D key is pushing!")
・・・
}
このようなプログラムを作ることはできないでしょうか?
どうぞ、ご教授の程よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
できますが、かなり面倒です。
termiosやncursesなんかを調べて見るといいかも。
この回答への補足
お世話になっております。
現在、Ubuntu Linuxのgccを使っており、curuses.hを試しているのですが、次のようなエラーが出てきます。
root@ubuntu:~/20140411# gcc -o test_getchar test_getchar.c
test_getchar.c:3:21: fatal error: curses .h: No such file or directory
#include <curses .h>
^
compilation terminated.
これはどのようなエラーなのか教えて頂けませんでしょうか?
curses.hというのが使えないと言うことでしょうか?
どうぞ、ご教示頂きますようお願い致します。
回答頂きありがとうございます。
#1の方に教えて頂いたプログラムをやってみたのですが、
このgetchar()関数ですが、何か文字を入力してからエンターキーが押されないと、cの変数に値が代入されないようですが、例えば1文字入れたら、自動的にエンターキーを入力するようにすることはできないでしょうか?
また、数秒たったら、自動的にcに値を代入して、次のステップに自動的に進むようにするようなことはできないのでしょうか?
今回教えて頂いたncursesというのでがありますが、
http://taichino.com/programming/1925
こちらのサイトに載っている
// キー入力する場合は以下
keypad(stdscr, true);
wtimeout(stdscr, 100); // 100ミリ秒でgetchがタイムアウト
このような関数が使えれば、エンターキーを押さなくても定期的なキーの値の取得ができると言うことなのでしょうか?
すみませんが、どうぞよろしくお願い致します。
No.6
- 回答日時:
簡単にはこんな感じで。
#include <stdio.h>
main(){
int c;
system("stty -icanon -echo");
while(1){
c = getchar();
if(c < ' ') break; /* 制御文字がキーインされたら終了 */
printf("%c key is pushed\r\n",c);
}
system("stty icanon echo");
}
回答頂きありがとうございます。
実際にこの方法をやってみました。これだとエンターキーを入れる必要がないのが確かに便利なことがわかりました。ただ、何もキーが入力されないとgetchar()でペンディング状態になるのと、IO入力のようなON/OFFの使い方はできないということも実感したのですが、ちょっとしたトグル入力などはなかなか使えるような気がしました。
いまこのような感じでコードを使わせてもらってます。
http://sourceforge.jp/projects/cc1101driver/scm/ …
No.5
- 回答日時:
基本的には割り込みプロセスなので
http://sourceforge.jp/projects/linux-kernel-docs …ハードウェア割り込み処理
此れを改造すれば実現可能と考えます。
割り込みが発生した時にフラグを立てメインプロセスからサブプロセスにジャンプしています。
尚その際には16進データをASCIIに変換するテーブルを参照して表示しました。
回答頂きありがとうございます。
いつかはハードウェア割り込み処理とか、カーネルとかハード制御に関わるプログラミングとかカーネルビルドも見ていきたいと思っています。いろいろと険しそうな感じはしていますががんばりたいと思います。
No.4
- 回答日時:
>このgetchar()関数ですが、何か文字を入力してからエンターキーが押されないと、cの変数に値が代入されないようですが、例えば1文字入れたら、自動的にエンターキーを入力するようにすることはできないでしょうか?
自動でエンターキーを入力するような事はできません(私が知らないだけという可能性はあります)。
また、#3の方もおっしゃっていますがgetchar()は標準入力からの入力なので、その入力がキーボードとは限りません。
>また、数秒たったら、自動的にcに値を代入して、次のステップに自動的に進むようにするようなことはできないのでしょうか?
どういう事をやりたいのかよくわかりません。
「自動的に」とはどういう事ですか?
コードを書かなくてもプログラム側で勝手に判断してやって欲しいという事ですか?
>このような関数が使えれば、エンターキーを押さなくても定期的なキーの値の取得ができると言うことなのでしょうか?
引用されてたヶ所は、何らかのキーが入力されていなくてもgetch()を呼び出してから100ミリ秒後にはタイムアウトして値を返すための設定ですけど(getch()はncursesが提供している関数)。
もしそれをncursesを使わずに行いたいということであれば先にもあげたtermiosを調べてみてください。
>これはどのようなエラーなのか教えて頂けませんでしょうか?
メッセージに書かれていますけど?
英文読む気がない。
辞書を引きたくない。
英文読んでもわからないと諦めてる。
読んでみたが何の事かわからない。
その他。
どれでしょう?
もし最初の3つのどれかなら英文読む努力くらいはしてください。
curses.h と書く所を curses .h と書いてしまってるのが原因ではあるんでしょうが。
回答頂きありがとうございます。まだcursesやってないのですが、とりあえずという感じで擬似的なIO入力で逃げるようなことやってみました。
No.1
- 回答日時:
#include<stdio.h>
main(){
int c; /* キーボードから受け取った文字を入れておく変数 */
c = getchar(); /* キーボードから1文字だけ受け取る */
printf("c = %c \n", c); /* [%c]を使って文字を表示 */
printf("c = %d \n", c); /* [%d]を使って、文字を数値として表示できる */
}
こういうのが載っていました。
回答頂きありがとうございます。
このgetchar()関数ですが、何か文字を入力してからエンターキーが押されないと、cの変数に値が代入されないようですが、例えば1文字入れたら、自動的にエンターキーを入力するようにすることはできないでしょうか?
また、数秒たったら、自動的にcに値を代入して、次のステップに自動的に進むようにするようなことはできないのでしょうか?
すみませんが、どうぞよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- フリーソフト 1秒毎にキーの←を押すソフト 1 2023/03/06 04:27
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- マウス・キーボード パソコンのゲームで押しずらいキーがあったのでchange keyというキーの割り当てを変える ソフト 1 2023/03/17 09:43
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Mac OS mac os xの設定の(起動ディスク)にブート用dvdが表示されません 1 2022/05/28 13:29
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- Java Java 南京錠 2 2023/02/04 11:46
- マウス・キーボード キーボードのCaps Lockキーと変換キーの挙動がおかしくなりました。 4 2022/09/04 22:44
- UNIX・Linux Ubuntuのアプリ版?が起動しません 1 2022/04/29 16:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
getchar()について 教えてくだ...
-
プログラミング初心者です。 Py...
-
batプログラム上で文字列を入力...
-
C言語初心者です。ファイルの読...
-
正負を反転させて出力するプロ...
-
C言語について
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
Date関数で書いた日付がおかしい
-
C言語 入力した値から0までの数...
-
C言語でgetchar();が上手く使え...
-
scanfの入力をgets関数で読み捨...
-
Userformの入力順序をタブオー...
-
漢字のソートについて
-
や
-
getc 等の違い
-
C言語 While文(ループ)内の...
-
プログラムC言語の整数の約数に...
-
電卓の小数点
-
Linuxで入力待ちなしkeyread関...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
数字以外が入力されたらエラー...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語 逆ピラミッドの作り方
-
double型が正常に認識されてい...
-
ワードで文字を入力する時の変...
-
コマンドプロンプトからのEOFの...
-
Linuxで入力待ちなしkeyread関...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
cout関数を使っているのですが...
-
enterでループ終了
-
"scanf"でエンターで改行させな...
-
C言語でgetchar();が上手く使え...
-
C言語scanf_sで何故か2回入力に...
おすすめ情報