処理キー入力でデータ表示を終了させる方法

このQ&Aのポイント
  • C言語を使用してCPUのアドレスのデータを表示させるプログラムを組んでいますが、表示させるたびにプログラムが終了するため、何回も入力が必要で面倒です。
  • 連続でデータを表示し、キーを押すことでデータ表示を強制終了させる方法は可能でしょうか?ソースコードは簡単なものです。
  • 無限ループを使用し、CTRL+Cなどで抜ける方法はあると思いますが、それ以外の方法でプログラムを組むことは可能でしょうか?
回答を見る
  • ベストアンサー

処理KEY入力で終了させる方法

今、学習でC言語を使いCPUのアドレスのデータを表示させるプログラムを組んでいます。 表示させるのは出来たのですが、表示させるたびに、プログラムが終わってしまうので、何回も入力するのがわずらわしい状態です。 例えば、連続でデータが半永久的に表示され、何かKEYを押すだけでそのデータ表示を強制終了 させることは可能でしょうか? ソースは、簡単なのですが、 #include<stdio.h> #define Dout 0x03ff int main { int i; DATA=inp(Dout); printf("DATA:%d\n",DATA); return(0); } while(1)で、無限ループをし、CTRL+Cなどで、抜ける方法はあると思うのですが、それ以外の方法で、プログラムを組むことは可能でしょうか?

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

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

キー入力チェックの参考にして下さい。

参考URL:
http://www.geocities.co.jp/SiliconValley-Bay/7437/c/c7.htm
bonborisan22
質問者

お礼

有難うございます。 getchを使い、プログラムを組むことができました。

関連するQ&A

  • ASCIIコード入力

    プログラムを作っていてどうしてもわからなくなりまして… #include <stdio.h> int main(void) { char c; c=38; printf("%c\n",c); return 0; } この場合は&が出てくるからいいんですけど… #include <stdio.h> int main(void) { char c; scanf("%c",&c); printf("%c\n",c); return 0; } この場合は97をscanすると9が出てきます。ASCIIコード入力でaを表示させたいんですが、何が間違っているのでしょうか? 初心者なもので…お願いしますm(__)m

  • Enterキーの入力

    今、RedHatLinuxでC言語を学んでいます。ゲームを作る宿題を与えられえ取り組み始めたのですがどうも最初からつまずいてしまいました… #include <stdio.h> #include <time.h> void main(void){ while(1) printf("%f\n",(float)clock()/CLOCKS_PER_SEC); } をENTERキーが入力されたところで停止する(無限ループから抜ける)ようにしないと話が進まないのです。 この先の、ファイルへの入出力などはフローチャートを書いてある程度予想できてるのですが、ENTERキーを入力するところがわかりません。どうか教えてください!

  • while文 直前に入力した数の和

    まず,整数を一つ入力する。 次に,0が入力されるまでの間,今入力した数と直前に入力した数の和を出力し続けるプログラムを書きなさい. > 4 > 5 9 > 91 96 > -8 83 > 0 という問題なのですが、何回やっても実行すると うまくいきません・・・。 プログラムを作ってみたんですが、 無限ループの状態になってしまいます・・・。 フィボナッチ数列というのを使ってみたのですが・・ #include<stdio.h> #include<conio.h> int main(void) { int i,n,fi=0.fi_1=1; printf("Data = "); scanf("%d",&n); while({ fi=fi_1+fi_2; printf("%d",fi); fi_2=fi_1; fi_1=fi; } getch(); return 0; } 初心者なので どなたか教えていただけませんか?

  • ピラミッド表示プログラム。

    ピラミッドを表示させるプログラムを考えています。 例えば3段の場合   *  *** ***** っというような表示です。 #include <stdio.h> void spira(int n); main() { int a; printf("段数は:"); scanf("%d",&a); spira(a); } void spira(int n) { int i,j=1,a,b,k; for(a=n;a>0;a--){ for(b=a-1;b<=n;b--){ printf(" "); } k=(j-1)*2+1; for(i=1;i<=k;i++){ printf("*"); } j++; printf("\n"); } } このように考えてみたのですが、無限ループになって表示できません。 どこが悪いでしょうか? 無限ループの原因はどうやったら解消されるでしょうか?

  • 分割コンパイルについて

    現在分割コンパイルが分からずに苦戦しています。 下記のリストは構造体を使わなければコンパイラを通すことができましたが、 使うとなぜか通りません。 あれこれ試しましたがどうしても分かりません。 何がおかしいのでしょうか? *define.hで全てのファイルへの定義や宣言を行わせています。 ////////////// //Main.cpp ////////////// #include <stdio.h> #include <conio.h> #include "define.h" int main( void ){ Tmp[0].c = 15; printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); aaa(); bbb(); getch(); return 0; } ////////////////// // A.cpp ///////////////// #include <stdio.h> #include "define.h" void aaa( void ){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); } ////////////////// // B.cpp ///////////////// #include <stdio.h> #include "define.h" void bbb( void ){ printf("a: %d\n", a); printf("b: %d\n", b); printf("c: %d\n", Tmp[0].c); printf("NUM:%d\n", NUM); } ////////////////// // define.cpp ///////////////// #include "define.h" int a = 10; int b = 20; struct Parameter { int c; }; struct Parameter Tmp[NUM]; ////////////////// // define.h ///////////////// #define NUM 100 extern int a; extern int b; extern struct Parameter Tmp[NUM]; void aaa( void ); void bbb( void );

  • あるキーを押したら強制終了させるには。

    Cの初心者です。 ある文字列をスクロールさせるプログラムを作りました。 ソースは以下です。 *********************************************** #include<stdio.h> #include<string.h> void wait(long x) { int i; for(i=0;i<x;i++){/* do nothing */} } int main(void) { char name[]="Hello OK Wave"; int i; int len=strlen(name); int time=0; while(1){ printf("\r"); for(i=0;i<=len;i++){ if(time+i<=len){ printf("%c",name[time+i]); } else { printf("%c",name[time+i-len-1]); } } time++; if(time>len){time=0;} wait(1000000000); } return(0); } ********************************************* (ちなみにコンパイル時最後のリターン文が実行されないという警告が出ます) 一応これで目的の動作はしてくれるのですが、 これですとwhile(1)の中を延々と続けているのでプログラムを終了させるために いちいちコマンドプロンプトごと終了させなければいけません。 (ちなみにコマンドプロンプト自体のコマンドはよくわからないです) これですとなんだか嫌な感じなので、あるキー、たとえば'Q'を押したら プログラムが終了してくれるようなことが出来ないだろうかと思っています。 exit(1)を使うのかな?と思いましたがどのようにキーを押したかの判定などを すればよいのか悩んでいます。 どうかよろしくお願いいたします。

  • C言語 データ

    今キーボードで入力された数字のデータを、あるアドレスのデータに書き込むという学習をしています。 #define Dout 035E ~~~~ printf("KEY INPUT\n"); scanf("%d",&c); outp(Dout,0xc); printf("035E:%x\n",Dout); 035Eというアドレスを定義したあとに、この文面ではDoutにscanfで入力された 数字は、outp(Dout,0xc);この中のcにデータとして書き込むのは出来ないのでしょうか? 例えば、0が入力されれば0を書き込み、1が入力されれば1を書き込むというプログラム にしたいと思っています。 教えていただけないでしょうか?

  • 簡単なようで分からない?for文での加算処理方法及び出力表示方法

    忙しい中失礼します。 ・・・???分からないので質問させていただきます。 プログラム過程 1.5桁の数値入力: 68562 2.偶数桁のみ2倍する: 8x2=16 6x2=12 3.68592→6165122という処理を行う。 4.6165182→処理:6 1+6 5 1+2 2→再度5桁表示:67532 (※2桁目と4桁目の数字が1.とは異なります) 5.67532各桁の加算処理を行い(6+7+5+3+2=23)、”23”をディスプレイ上に表示させる。 希望出力結果:    5桁入力 68592 67532 合計 23    ←加算処理方法及び出力表示方法(ここが分からないのです) を望んでいます。 分からないところ:どうやって67532の加算処理を行い、どうやってそれをディスプレイ上に表示させれば良いのかが分かりません???            以下のプログラム[1]、[2]から、[2]を[1]に組み込もうとしています。ですが、[2]for文のカッコ内()の条件???、及び[2]を[1]のどこに組み込めば”合計23”が表示されるのかも分かりません。 そもそもfor文で行うこと自体が無理?そんなことはない、と思っているのですが・・・。それとも[2]を[1]に組み込もうとしてること自体が間違っている?のですかね??? 大変忙しいとは思いますが、アドバイス等ありましたらお願いします。 <使用環境: Borland?? C> [1] 1~4までのプログラミング(完成済) #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num,tra; int inpt=5; int inptnum; int s; printf("5桁入力; "); scanf("%d", &num); for(inpt ; inpt >=1 ; inpt--) { if(inpt%2 == 0) { inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; s=(tra*2)/10+(tra*2)%10; printf("%d",s); } else {inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; printf("%d",tra);} } system("pause"); return 0; } [2]単独での加算処理プログラム(完成済) #include <stdio.h> #include <stdlib.h> int main() { int count; int Sum; Sum=0; for (count = 1; count <= 6; count++) {printf("%d ",count); Sum = Sum + count; } printf("\nSum%d\n", Sum); system("pause"); return 0; }

  • 文字列の入力

    文字列(名前)と誕生日を読み込み、表示するプログラムです。文字列を読み込むときに空行を入力すると、読み込みを終了して表示するようにしたのですが、うまくいきません。読み込む時に使う関数が違うのだと思います。scanfとgets、fgetsは試したのですが、だめでした。 教えてください。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define DATA 3 int main() { char *name[DATA]; char work[31]; int month[DATA]; int day[DATA]; int count1,count2; printf("Data #1\n"); printf("name ="); fgets(work,31,stdin); for(count1=0;(work[0]!='\n')&&(count1<DATA);count1++){ printf("month ="); scanf("%d",&month[count1]); printf("day ="); scanf("%d",&day[count1]); name[count1]=(char *)malloc((strlen(work)+1)*sizeof(char)); strcpy(*(name+count1),work); printf("\n"); if(count1<DATA-1){ printf("Data #%d\n",count1+2); printf("name ="); fgets(work,31,stdin); } } for(count2=0;(count2<DATA)&&(count2<count1);count2++){ printf("Data #%d\n",count2+1); printf(" name: %s\n",*(name+count2)); printf(" birthday: %2d %2d\n",month[count2],day[count2]); } }

  • scanfに文字が入力されたときにエラー表示させる

    こんばんは.C言語勉強中です. 以下にsizeofを用いて各データタイプのサイズを表示させるプログラムを作りました.プログラム全文は下に貼付けました.これは,1-7までのいずれかの数字を入力すると,それに対応したサイズが表示されます.1-7以外の数字が入力されると,Type 1 - 7, please,と表示され,再び数字を入力出来ます.このプログラムは数字を入力している間はうまく機能していると思います. ただ,文字を入力すると無限ループに陥ってしまいます.僕は以下の scanf("%d",&typed); で10進数で読み込んで, if(typed<1 || typed >7) とすれば,文字も含めて全ての入力に対して排除できるかと思ったのですが,これではダメなようです. こういう場合,どうやって文字の入力に対するエラーを表示させるのが一般的なのでしょうか? 素人質問ですみません.よろしくお願いします. #include <stdio.h> #include <stdint.h> #include <Windows.h> int8_t main() { int typed; while(1) { while(1) { printf("Type the data type you wanna know the size of\n"); printf("char 1, short 2, int 3, long 4, long long 5, float 6, double 7: "); scanf("%d",&typed); printf("What you typed is %d\n",typed); if(typed<1 || typed >7) { printf("Type 1 - 7, please\n"); Sleep(1000); continue; } else { break; } } printf("Data size is "); switch(typed){ case 1: printf("%d\n",sizeof(char)); break; case 2: printf("%d\n",sizeof(short)); break; case 3: printf("%d\n",sizeof(int)); break; case 4: printf("%d\n",sizeof(long int)); break; case 5: printf("%d\n",sizeof(long long)); break; case 6: printf("%d\n",sizeof(float)); break; case 7: printf("%d\n",sizeof(double)); break; default: printf("Unexpected Value!\n"); break; } Sleep(2000); } return(0); }