• ベストアンサー

c言語.ctrl文字の読み取り

unixでのプログラミングについてです. コンソールで,キーボードから[ctrl+英文字]が入力されたことが 分かるプログラムを作りたいのですが, どのようにすればいいのでしょうか. 例えばctrl+Cやctrl+Zならば,signal.hを利用すれば入力された事がわかりますが, シグナルを送るキーでない,ctrl+Lなどはどのようにすれば 押されたことが分かりますか. よろしくお願いします.

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

普通に1文字入力すれば、Ctrl+Aなら'\x01'、Ctrl+Bなら'\x02'、…が入ってきます。Ctrl+Lは'\x0c' Ctrl+Cなんかも、端末をrawモードにしてsignalを発生させないようにしておけば、普通のキー入力で'\x03'として取得できます。 (というか、signal システムコールは、プロセス間通信で端末などからのsignalを捕捉するものです。 そのため、INTRをCtrl+C以外に割り当ててるような環境だと、 signal(SIGINT)では、正しくCtrl+Cを検出できません。 純粋なキー操作としての「[Ctrl]を押しながら[C]」の検出にsignalを使うのは間違えてます。)

goopth
質問者

お礼

有り難うございます. 解決しました.

関連するQ&A

  • c言語プログラミングHELP!

    c言語でプログラムを組んでるんですが、どうしてもわからないものがありまして、 まず一つ目がキーボードから英小文字を一つ入力し、その文字を大文字に変換して出力するプログラミングです。結果がまずひとつの英小文字を入力して、入力した文字と、大文字に変換した文字を出力するプログラミングです。 ちなみにヒントは'a'=97,'A'=65です 二つ目が二桁の16進数('41'から'49','50'から'59')を入力すると対応する文字を表示するプログラミングです。また、%xは使用しないこと。なお、入力に間違いはないものとする。(ヒントは入力は一つの数値か、二つの文字か?だそうです。) 結果は二桁の16進数('41'から'49','50'から'59')を入力して、文字コードの二桁の数字と文字を出力するプログラミングです。 お願いします。

  • C言語

    (a) キーボードから入力された文字列をそのままディスプレイに表示するプログラムを作成しなさい。 という問題 #include<stdio.h> main() { char word[1000]; /*文字型の変数の宣言*/ scanf("%s", word); /*キーボードから文字列を入力*/ printf("%s\n", word); /*入力した文字列を出力*/ } と作りましたがこれではコンソール中で文字を打ってからエンターを押さないといけないからといわれ再提出になってしまいました。 エンターを押さないでそのまま出力するということは、できるのでしょうか? あと自分の作ったプログラムではスペースや改行を使うことができないから使えるようにしろと言われてましたがそれわできますか? 変換仕様をかえればいいのですか ほかにもかえる所はありますか?

  • CTRL+Dでループを抜けるには

    RedHatLinux7J環境でC言語のプログラミングを行っています。キーボードからCTRL+D(EOF)が入力されるまで、1文字入力しその文字コードを出力するプログラムです。 しかし、CTRL+Dを2回押さないと処理が終わりません。 これはなぜなのでしょうか。ご存知の方いらっしゃいましたらお願いいたします。 #include<stdio.h> main(){ int ch; while((c=getchar())!=EOF) printf("%d ",ch); putchar('\n'); }

  • CtrlとAltを使っての文字入力が出来ません。

    こんにちは、質問があります。 文章を作る際、クメール文字フォントというのをダウンロードしました。 このフォントを使って通常に文字を入力することは出来ます。 しかし、一つのキーに4つの文字が割り当てられているため、Shift、Ctrl+Alt、Shift+Ctrl+Altと共にアルファベットのキーを押さなければなりません。 Shiftはきちんと機能するのですが、CtrlとAltのキーが全く作動しません。 CtrlとAltと共にアルファベットキーを押すと、ショートカットが作動してしまい、文字を入力することが出来ないのです。 PCはWindows Meです。 キーボードにおけるショートカットの機能を解除する事は可能なのでしょうか? 教えて下さい、お願いします。

  • C言語のプログラミングについて

    C言語のプログラミングについて プログラミング初心者です。下のプログラムに詰まりました。 下のプログラムをfgets()、atoi()の組とgetchar()を用いて表示するにはどのようなプログラムを書けばよろしいのでしょうか? % ./descending 正の整数: 10 英文字: z 1: z 2: y 3: x 4: w 5: v 6: u 7: t 8: s 9: r 10: q %

  • C言語について

    以前も同じことを質問したのですが、分からなかったので、また質問します。本を読んでも分かりませんのでプログラム全てを教えて下さい。2日も考えています。他人からすれば何で説明を読んでも分からないのか?と思われると思いますが、本当に全く分からないし見当もつきません。よろしくお願いします。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、"dog"を逆さまにすると"god"になる。 以上の5問です。できるだけ簡単で理解しやすいものでお願いします。

  • c言語の問題です。

    キーボードより1文字をCに入力し、その文字を画面に出力するとともに大文字も入力する。入力時に(a)=97、~(z)=122以外は画面入力とする。また'*'マークが入力されたら終了とする。 この問題についてプログラムとできればフローチャートについて 解答をお願いしたいのですが。 よろしくお願いします!

  • Ctrl+=のやりかた

    Ctrl+Equals(=)とキーボードを押したいです。 win8を使っています。 =の専用キーはないキーボードです 普段=を入力するときは、SHIFT+「ほ」を押しています。 ctrl+shift+「ほ」だと表示が縮小されます。 ご存知のかた教えてください。

  • C言語の問題

    配列の問題 1.キーボードから入力したアルファベットの大文字(A~Z)の入力回数をそれぞれ数え、結果を画面出力するプログラムを作成せよ。但し、入力の終了はEOFとし、入力回数のカウントには、配列を用いるものとする。(文字ごとに回数を格納する配列を用意する) 2.キーボードから番号(数字)を入力し、その番号に該当する文字列中の文字を画面表示するプログラムを作成せよ。なお、数字以外の文字が入力した場合と、文字列の範囲外の数字が入力された場合は、任意のメッセージを出力し、再入力するようにする。また文字列はキーボードから入力するものとする。 この問題が解けなくて困ってます。どうか知恵をかしてください。

  • C言語で、文字とか入力されなくても実行を続けたい

    現在簡単なゲームをunix系のOSのC言語でつくってますが なにも入力されなくても停止せず実行を続けられる getcharのような関数はないのでしょうか? windows系のOSにはcons.hヘッダーあたりに そんな関数あったような気がするのですが。。。 普通のgetcharだと、文字が入力されるまで(enter押されるまで) そこで実行が一時中断されてしまい リアルタイムで動くプログラムができないのですが。。。