• 締切済み

char配列とキーボードからの入力について

char pressedChar[] = new char[400]; と定義し、 for(i=0;i<=400;i++) {    pressedChar[i] = e.getKeyChar();    repaint(); } でキーボードの文字を入力した順に1文字ずつ読み込みたいのですが、 (a b c と入力したなら pressedChar[0]=a pressedChar[1]=b pressedChar[2]=cと言ったように) i=400まで同じ値が入力されます。 どうすればいいのか教えてほしいです

  • Java
  • 回答数2
  • ありがとう数5

みんなの回答

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.2

e はイベントのe ですよね。 イベント処理というのは、一文字押されるごとに実行される処理を記述します。 上記のプログラムは、一文字押されたらその文字を400回処理する内容になっています。 この場合、forが要らないのだと思います。

  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.1

for文無しで↓ pressedChar[i] = e.getKeyChar(); i++; if (i == 400) { /* 400超えたときの処理 */ } repaint(); #for文について、勉強しなおした方がいいと思います。

関連するQ&A

  • ポインタ配列

    "one","two","three","four","five","six","seven","eight","nine","ten" のポインタ配列の文字列を、ASCIIコード順に並べ変えようと思ったのですが、 もうどこが間違っているかさえわからないぐらいになってしまいました。 まだまだはじめたばかりなもので、わからないことだらけなんで、 できるだけわかりやすい説明おねがいします。 関数の引数に問題があるのじゃないかと思ったのですが、 何かいいアドバイスありましたら、お願いします。 #include <stdio.h> /* 関数のプロトタイプ宣言 */ int strmp(char *,char *); void cpy(char *,char *); int main (void) { /* ポインタ配列の定義 */ char *x[10]={"oneee","twooo","three","fourr","fivee","sixxx","seven","eight","ninee","tennn"}; /* ポインタのポインタの定義 */ char **pp=x; char k[100]; char *p=k; int i,t,a,b,c,d; a=0; /* ポインタ配列を自作関数を使って、ASCIIコードの大きいほうからに並び替える */ for(i=0;i<9;i++) { for(t=1;t<10;t++) { a=strmp(*(pp+i),*(pp+t)); if(a<0) { cpy(p,*(pp+i) ); cpy(*(pp+i),*(pp+t) ); cpy(*(pp+t),p); } } } for(i=0;i<10;i++) { printf("%s ,",x[i]); } printf("\n"); return 0; } /* 文字の比較をする関数 */ int strmp(char *x,char *y) { int i; for(i=0;*(x+i)==*(y+i);i++) { if( *(x+i)=='\0') { return 0; } } return *(x+i)-*(y+i); } /* 文字をコピーする関数 */ void cpy(char *a,char *b) { int i; for(i=0;*(b+i)!='\0';i++) { *(a+i)=*(b+i); } *(a+i)='\0'; }

  • C++ キーボードから入力した文字を配列に

    キーボードから「a、aa、b、ab、・・・」などと 文字を入力し、配列にいれたいのですが、うまくいきません。 scanf("%s", orig); とすると、 aaababのようにしか入力できないため、 「aa」のように複数の文字列を1つのものとして入力することができません。 以下にプログラムをのせたので、 ご教授お願いします! int m; unsigned char orig[500]; for(m=0;;m++){ scanf("%s", orig[m]); if(orig[m]=='E') break; }

  • 関数に配列を渡して値を変える

    関数に配列を渡して値を書き換えたいのですが、文字配列である char b[10]="abc"; の書き換えが綺麗にできません。 どのように書いたら綺麗にできますか? void hen(int *a, char *b,char **c){ *a=7; b[0]='d'; b[1]='e'; b[2]='f'; //こういう書き方なら渡せるけれどb[10]="def"; 見たいな書き方で一行で値を渡す方法はないものかな? *c="jkl"; } void main (void){ int a=5; char b[10]="abc"; char *c="ghi"; hen(&a,b,&c); printf("%d %s %s\n",a,b,c); }

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • 配列内の文字列を読み込む方法

    C++言語において質問です。あまり詳しくないので、変な質問でしたらすみません。 配列の文字列内にスペースが有る場合とない場合で表示を分けるものを作りたいと 思っています。 以下のようなものを書いた所、動くけど『iがいらない』、『メモリリークしている』 という風に言われました。自分でも調べてみたのですが、2つの事を解決できません。 どのようにすればよいのか、お教え願えませんか。 又、この場合のメモリリークとはどういう意味なのでしょうか? #include <stdio.h> #include <string.h> #include <ctype.h> char* name_list[] = {"", "AAA A", "BBBB", 0}; void main(){ int i = 1; char *b=0; for(char** a = &name_list[1]; *a != 0; a++, i++){ for(char* p = *a; *p != '\0' && !isspace((unsigned char)*p); p++) ; if(*p != '\0'){ b = new char[strlen(name_list[i]) + 3]; sprintf(b, "space %s", name_list[i]); } else { b = new char[strlen(name_list[i]) + 1]; strcpy(b, name_list[i]); } fprintf(stderr, "%s\n", b); } return; }

  • キーボード入力がおかしい。

    WinXPの自作PCを使用していますが、ここ数日、表題のとおりキーボード入力が おかしくなる事があります。再起動すれば治るのですが、原因を知りたくて投稿しました。 症状:半角アルファベットならば正確に入力できるのだが、ローマ字入力で入力すると、 母音の入力がおかしくなっています。(例)「a」が「b」で、「I」が「C」で入力されます。 したがって、 「ちゃ」と入力する時に、「T」「Y」「A」の順で打ち込むが、画面上では「T」「Y」「B」となって しまいます。今まで経験した事のない症状なので、教えていただけますでしょうか。 OSはXP(SP3)、ATOK2009を使用しています。キーボードは汎用の物を使っており、 再起動すると治る事からキーボード不良ではないと考えます。仕様で追加情報が必要であれば 補足欄に追加していきます。

  • char型配列について

    基本的なことですが、 char str[5]="Hello"; --> str[0]='H' str[1]='e' str[2]='l' str[3]='l' str[4]='o' str[5]='\0' では、ないのでしょうか? エラーが出ます。 //error C2117: 'str' : 指定された配列には、初期化子が多すぎます。 char str[6]="Hello"; では、コンパイルできます。 ---------------------------------- また、 #include<iostream> using namespace std; int main() { char str[6]="Hello"; cout << str << endl; for(int i=0;i<7;i++) { cout << "i=" << str[i]; if(str[i]=='\0'){cout << " NULL" << endl;} else{cout << endl;} } getchar();return 0; } ----------------------------------------------- とすると、 Hello i=H i=e i=l i=l i=o i= NULL <--ここで、NULLなら、 i=フ <--このぶんは、いらないと思うのですが、、、 となります。 str[6] i=6 は、何を意味するのでしょうか? Visual C++ NET を使用しています。 よろしくお願いします。

  • キーボードからの入力・出力について

    ☆いつもお世話になります。☆ 下記のCのプログラムは、入力したものをそのまま表示します。 しかし、出力する直前の改行がされないんです。 #include <stdio.h> #include <string.h> int main(void) { char array[80] ; int c ; int s=0 ; printf("入力してください\n") ; for( ; ; ) { c = getchar( ) ; if ( c != EOF ) { array[s] = c ; s++ ; } else { array[s] = '\0' ; break ; } } putchar( '\n' ) ; /* ★この改行は?★ */ puts( array ) ; printf( "strlen(array)=%d\n", strlen(array) ) ; return 0 ; } キーボードから、 'A' 'B' 'C' 'D' 'E' 'F' 'G' 7文字の入力の後に コントロール+Z を入力します。 ----------------次のようになります。---------- 入力してください ABCDEFGABCDEFG strlen(array)=7 初めのABCDEFGはキーボードからの入力時に表示されたもので、 後のABCDEFGはputsで出力したものと思います。 私は2つのABCDEFGの間に改行が入るんじゃないかなあ~~と思うんですが、 なぜそうならないんでしょうか? VC++6.0でWin32 Console Applicationで作成しています。

  • char*を初期化したいのですが

    Cの標準関数だけで char*を初期化したいのですが どの様にすればいいのでしょうか? char* a = "aaaa"; char* b = "bbbb"; strcat( a, b );//"aaaabbbb"? とし使いまた後で aにまた値を入れ直したいので 初期化して再利用したいのですが どのようにすればいいのでしょうか? ポインタとかもうっすら(ほとんどわかりません) よろしくお願いいたします

  • c言語 int型の数字をchar型の配列に

    c言語についてです。 int型の数字をchar型の配列に入れたいです。 関数に対してint型の数字を文字列として渡し、 関数内でchar型の配列に格納したいです。 例として、 a(char a[]){  ~~  ~~ } int main(void){ int x = 5678;  ~~  a(x); } とできるようにしたいです。 しかしこれだと5678という値がそのままchar型の一つの配列に入る?ため正しくないです。 欲しい結果としてはちゃんとa関数内で、 a[1] = '5' a[2] = '6' a[3] = '7' a[4] = '8' となってほしいです。 もともと渡す値が”5678”となっていれば結果は正しく出るのですが、 渡す値がint型と決まっているためどうにかして5678を”5678”とすればいいのではないかと考えています。 つまり5678を単純に文字列に変換すればいいのでしょうか? またプログラム内ではsprintfやatolを使用しないで実現させたいです。 難しいかもしれませんがお願いします。 なんだか説明が下手ですみません。 お願いいたします。

専門家に質問してみよう