• ベストアンサー

\x1bが働きません。

wogotaの回答

  • wogota
  • ベストアンサー率42% (66/154)
回答No.2

エスケープシーケンスを使って画面を消したり、色を変えようと なさっていると思いますが、DOSプロンプトでは出来なかった ような気がします。MS-DOSとかPC-DOSでは使えますが・・・ あと、「む」で「¥」が表示されるのは、お使いのキーボードを Windowsが英語版のキーボードと認識している、と思われます。

vide
質問者

お礼

そうそうエスケープシーケンス(制御文字)とかいうやつです。 有力な情報ありがとうございます。 しかし私にはさらなる疑問が… PC-DOSってはじめて聞きました。これって何ですか? あとWindows上ではキーボードは正常に動作してますが、 DOS窓とWin終了後のMS-DOSモードどちらともキーボードの認識が おっしゃるように誤認しているようです。 DOS上のキーボードの認識を改める方法ってあるんでしょうか?

関連するQ&A

  • なぜに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言語プログラム

    したのプログラムでgetch()の代わりにscanf()を使って、入力した数が負なら終了、正なら"次の数を入力してください"と表示してループを続けるプログラムを作りたいのですが、どこを変えればよいのですか? #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(); }

  • C言語(while構文)

    #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(); } getch()の代わりに、scanf()を使って整数値を入力させ、負の数が入力されたら終了するプログラム(正を入力したら「次の数値を入力せよ」とだして、繰り返す。)を造りたいのですが、どこを変えればよいか教えてください。

  • \x1bを使ったswitch文が反応しない

    int main(void){ int n; while(1){ menu(); scanf("%d", &n); switch(n){ case 1 : printf("\x1b[6;10H%s", "メニュー1を実行します"); break; case 2 : printf("\x1b[6;10H%s", "メニュー2を実行します"); break; case 3 : printf("\x1b[6;10H%s", "メニュー3を実行します"); break; default : printf("\x1b[6;10H%s", "指定数字ではありません"); break; } } return 0; } void menu(void){ printf("\x1b[2J"); printf("\x1b[3;10H%s", "メニュー1"); printf("\x1b[4;10H%s", "メニュー2"); printf("\x1b[5;10H%s", "メニュー3"); } コンパイルは通るのですが、数字を入力しても反応が無くwhile(1)の繰り返しが続くだけになってしまいます。これはどこか問題あるでしょうか?

  • C言語でタイミングを合わせるゲームを作っているのですが・・・。【getch()】

    C言語で壁に向かって衝突していくボールをタイミングよくスペースキーを押すことで打ち返すプログラムを作っています(多分実行しないと分かりにくいかも)。 そこでキーの入力にgetch()関数を使っていますが、これだと何かキーが入力されるまで永遠と待ち続けてしまうので、タイミングが100%合ってしまいます。 そこで指定された秒数だけキーの入力を受け付けるような方法を探しているのですが、そのようなものはあるのでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h> int main(void){ int key=0,ballichi=0,i,i2; system("cls");//画面の初期化 for(i=0;i<10;i++){ for(i2=0;i2<10;i2++){ if(ballichi==i2){printf(" o"); }else{printf(" ");} } printf("|壁"); if(i==9){ key = getch(); //キーから一文字入力 switch (key) { /* キー入力チェック */ case ' ': printf("スペースキーが押されました"); break; } } Sleep(500); ballichi++; system("cls"); } return 0; }

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

    現在分割コンパイルが分からずに苦戦しています。 下記のリストは構造体を使わなければコンパイラを通すことができましたが、 使うとなぜか通りません。 あれこれ試しましたがどうしても分かりません。 何がおかしいのでしょうか? *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 );

  • 中央値の抽出

     printf("\n中央値は%7.1fです。\n",median);の部分で%7.1fの7.1というのはどんな意味があるのでしょうか? #include<stdio.h> #include<conio.h> void main() { int d[100]; int i,j,n,temp,n_med; float median; printf("データ数を入力してください。(最大100); "); scanf("%d",&n); for(i=0;i<n;i++){ printf("%d番目のデータは? ",i+1); scanf("%d",&d[i]); } for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(d[i]<d[j]){ temp=d[i]; d[i]=d[j]; d[j]=temp; } } } n_med=n/2; if(n==n_med*2){ median=(float)(d[n_med-1]+d[n_med])/(float)2; } else{ median=d[n_med]; } printf("\n中央値は%7.1fです。\n",median); getch(); }

  • 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)に変えた場合に、正の数を入力した後に、「次の数を入力してください」という文を表示してからくりかえす方法をおしえてください。

  • 矢印キーの反応が悪くなります

    このコードをmain関数とキーコントロール関数とに分けたところ、 キーのレスポンスがわるくなりました。 このソースコードをどのように分割すれば一つのファイルで書いたように、 動いてくれるのかわかりません。 よろしくお願いします。 /* 分割前のソースコード */ #include <stdio.h> #include <conio.h> int main(int argc, char *argv[]){ int key=0; while(key!='q'){ //終了キー 'q' key=_getch(); //Keyによって分岐 switch((key == 0x00 || key == 0xe0) ? _getch(): key) { case 0x48:printf("上");break;//上 case 0x50:printf("下");break;//下 case 0x4b:printf("左");break;//左 case 0x4d:printf("右");break;//右 default:break; } } return 0; } /*--ここから下が分割してみたソースコード---*/ /* arrowkey.h */ #ifndef ARROWKEY_H #define ARROWKEY_H int arrowkey(void); #endif //ARROWKEY_H /*---------------------------------*/ /* arrowkey.c */ #include <stdio.h> #include <conio.h> #include "arrowkey.h" int arrowkey(void){ int key=_getwch(); //Keyによって分岐 switch((key == 0x00 || key == 0xe0) ? _getch(): key) { case 0x48:printf("上");break;//上 case 0x50:printf("下");break;//下 case 0x4b:printf("左");break;//左 case 0x4d:printf("右");break;//右 case 0x71:break;//終了 default:break; } return key; } /*---------------------------------*/ /* main.c */ #include "arrowkey.h" int main(int argc, char *argv[]){ int key=0; while(key!='q'){ //終了キー 'q' key=arrowkey() } return 0; }

  • c言語です。

    c言語です。 実行結果 式 3 X1 + 2 X2 + 1 X3 = &g 2 X1 + 5 X2 + 2 X3 = &g 1 X1 + 4 X2 + 1 X3 = &g 解 X1 = 1 X2 = 2 X3 = 3 を 式 3 X1 + 2 X2 + 1 X3 = 10 2 X1 + 5 X2 + 2 X3 = 18 1 X1 + 4 X2 + 1 X3 = 12 解 X1 = 1 X2 = 2 X3 = 3 に直したいのですが&gの所をどのようにしたら10.18.12になりますか? #include <stdio.h> #include <float.h> #define N 3 double A[N][N] = {{3,2,1}, {2,5,2}, {1,4,1}}; double b[N] = { 10, 18, 12 }; void Gauss_J( int, double*, double* ); void main(void) { int i; printf( "%d式\n", N ); for( i = 0; i < N ; i++ ) { printf( "%g X1 + %g X2 + %g X3 = &g \n", A[i][0], A[i][1], A[i][2], b[i] ); } printf("解\n"); Gauss_J(N, (double *)A, (double *)b ); printf("X1 = %g \n", b[0]); printf("X2 = %g \n", b[1]); printf("X3 = %g \n", b[2]); } void Gauss_J(int n, double *a, double *b) { int p, i, j,I ; double pivot, c ; for ( p = 0 ; p < n ; p++ ) { pivot = a[ p*n + p ]; for ( i = p ; i < n ; i++ ) { a[ p*n + i ] /= pivot; } b[ p ] /= pivot; for ( I = 0 ; I < n ; I++) { if (I != p) { c = a[ I*n + p]; for ( j = p ; j < n; j++ ) { a[ I*n + j] -= c * a[ p*n + j ]; } b[ I ] -= c * b[ p ]; } } } return ; }