• ベストアンサー

教えてください。

いつもお世話になっています。 以下のソースについてですが、ESCキーを入力するとwhile文から抜けたいのですが・・・教えてください。 #include <stdio.h> int main(void) { char ch[128]; while(1){ scanf("%s", ch); if( ch[0] == 0x1B ){ /* キー入力が Esc キーなら、 */ printf("%02X=Esc ",ch[0] ); /* Esc の キーコ-ドを表示して、*/ break; /* while のループを終了する */ } } return 0; }

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

  • ベストアンサー
  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.2

MS-DOS(Win XP)で動きます。 scanf()ではやりにくいので、getch()を使っています。 #include <stdio.h> int main(void) { char ch[128]; int c; int i; for(i=0; i<128; i++) ch[i] = '\0'; i = 0; while(1){ c = getch(); if(c == 0x1B){ /* キー入力が Esc キーなら、 */ printf("%02X=Esc\n", c); /* Esc の キーコ-ドを表示して、*/ break; /* while のループを終了する */ } else{ putch(c); ch[i] = (char)c; i ++; } } printf("%s%2X=ESC\n", ch, c); return 0; }

hatenan114
質問者

お礼

回答ありがとうございます。 すごく参考になりました。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

処理系に依存せずに実現することは無理です。

関連するQ&A

  • scanf()関数の使い方について

    はじめまして。 質問があります。 まずは、以下のコードを見てください。 ---------------------------------------------------------------- #include<stdio.h> int main(void) { char c; int i; printf("0を入力すると終了します。\n"); while(1) { printf("文字を入力してください=>"); scanf("%c",&c); printf("入力した文字は %c です。\n",c); printf("数字を入力してください=>"); scanf("%d",&i); if(i==0) { break; } printf("入力した数字は %d です。\n",i); } return 0; } ---------------------------------------------------------------- 上のコードを実行すると、初回はscanf()はcharとintの両方とも 入力待ちになってくれるのですが、2回目以降はcharは入力待ちに なってくれません。これは、なぜなのでしょうか? ご教授お願いします。 現在VC++6.0を使用しております。

  • C初心者です。どうかお助けを

    独習Cという本で独学中なのですが #include<stdio.h> int main() { int a,b; char ch; printf("実行したい演算は\n"); printf("加算(A)、減算(S)、乗算(M)、除算(D)のどれですか\n"); do{ printf("アルファベットの1文字を入力してください:"); ch=getchar(); while(getchar()!='\n'); }while(ch!='A' && ch!='S' && ch!='M' && ch!='D'); printf("\n"); printf("最初の数字を入力してください:"); scanf("%d",&a); printf("二つめの数字を入力してください:"); scanf("%d",&b); switch(ch){ case 'A': printf("%d",a+b); break; case 'B': printf("%d",a-b); break; case 'C': printf("%d",a*b); break; case 'D': if(b!=0)printf("%d",a/b); } return 0; } このプログラムでの14行目の while(getchar()!='\n');の必要性がわかりません。 どなたか有識者の方の回答をお願いします。

  • switch文とscanfについて

    ソースコード------------------------------------- #include <stdio.h> void main(){ int i; char s, ch; while(1){ printf("Input 1 or 2\n"); scanf("%c", &s); switch(s){ case '1' : printf("Input a number\n"); scanf("%d", &i); printf("You input '%d'\n", i); break; case '2' : printf("Input a character\n"); scanf("%c", &ch); printf("You input '%c'\n", ch); break; } } } ----------------------------------------------- 実行例----------------------------------------- Input 1 or 2 1 Input a number 4 You input '4' Input 1 or 2 Input 1 or 2 //------(1) 2 Input a character You input ' //------(2) ' Input 1 or 2 ----------------------------------------------- (1)について。 なぜ"Input 1 or 2"が二回繰り返されているのですか。 (2)について。 scanfが呼び出されて入力待ちになることを期待しているのですが、 なぜ(2)のようになってしまうのでしょうか。

  • 困っています

    文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。途中まで考えたのですが、分かりません。教えてください。宜しくお願いします。 #include <stdio.h> char str(30); printf("文字列を入力") while (1) { ch=getchar(); if (ch==EOF) break;

  • scanf関数 バッファに残ったエンター入力の扱い

    前日質問にて以下のプログラムで、二度目のscanf()が無視されてしまう 旨質問したところ、1度目のscanfでの入力でエンターがバッファに残って いるため、それを取り込んでしまうという回答いただきました。 改善方法として(*)のscanf関数で「%c」の前に空白を入れたところ 正常に動作し、改善されたのですが、なぜ改善されたのかご教示願えませんでしょうか? よろしくお願いします #include <stdio.h> int main(void) {   int g;   char ch;      do {     printf("何ガロンですか?: ");     scanf("%d", &g);     printf("%.2fリットルです\n", 3.7854 * g);     printf("また計算しますか?Y/N : "); (*) scanf("%c", &ch);   } while(ch == 'Y' || ch == 'y');   return 0; }

  • C言語

    入力した文字列と文字列'x'を受け取り、'x'の位置のポインタを返すのですが、例えば、saxcvと入力すると、xcvと表示されるのですが、このソースだと、saxcvと全部表示されてしまいます。分からないので、教えてください。宜しくお願いします。 #include <stdio.h> char *a(char *sew) { char *p=sew; while (*sew != 'x') { sew++; } return(p); } int main(void) { char str[21] ={'\0'}; int i=0,no=0; char ch; printf("文字を入力してください:"); while (i<21) { ch=getchar(); if (ch=='\n') {break;} else if (ch != '\0' && ch != '\0') { str[i] =ch; i++; } } for(i=0; i<20; i++) { if(str[i]=='x') { printf("'x'以降は%sです。\n", a(str)); no=1; break; } } if (no==0) printf("'x'は見つかりませんでした。"); return (0); }

  • scanfについて

    いつもお世話になっております ------------------------ #include<stdio.h> #include<stdlib.h> int main(void){ int age , kyoku; char buff[16]; while(age){ printf("0で終了/年齢を入力して下さい"); scanf("%d",buff); age = atoi(buff); if( age == 0 ){ printf("終了します\n"); break; } ・ ・ ・ ------------------------ 上記のプログラムは、 年齢を入力させて もしも0だったら処理を終了させるという プログラムです。(つもり) scanfで入力された値を いったんバッファに蓄えて atoiで整数に変換させているつもりなんですが 例えば、「20」と入力しても ageの値が0、buffの値がエラーになってしまいます どこがおかしいのが ご教授して頂けたら幸いです。

  • なぜに0が表示されるの?

    キー入力を調べるために以下の プログラムを作成したのですが・・・ #include <stdio.h> #include <stdlib.h> #include <conio.h> int main(void) { int inkey = 0; while (1) { inkey = getch(); if (inkey == 0x1b) { break; } printf("%d %x\n", inkey); } } ↑↓→←とかのキーは、 変数inkeyの値を表示する前に、 0 0と表示されます。 なぜなんでしょうか? ほかのキーでは、普通に表示されます。 教えてください。

  • プログラミングで質問です。言語は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; }

  • 質問です。

    このソースのメイン関数でabcxyzと入力すると、xがあるので、関数で、a(char *sew)が呼び出されて、この関数には、abcxyz渡って、関数内では、x以外なら、sewを++します。なぜ、x以外のabxyzと表示されないんでしょうか?xyzになるのが分かりません。教えてください。よろしくお願いします #include <stdio.h> char *a(char *sew) { char *p=sew; while (*p != 'x') { p++; } return(p); } int main(void) { char str[21] ={'\0'}; int i=0,no=0; char ch; printf("文字を入力してください:"); while (i<21) { ch=getchar(); if (ch=='\n') {break;} else if (ch != '\0' && ch != '\0') { str[i] =ch; i++; } } for(i=0; i<20; i++) { if(str[i]=='x') { printf("'x'以降は%sです。\n", a(str)); no=1; break; } } if (no==0) printf("'x'は見つかりませんでした。"); return (0); }

専門家に質問してみよう