• ベストアンサー

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; }

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

  • ベストアンサー
  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

具体的に、どのように配列の中に入ればよいのか教えてもらえませんか? unsigned char orig[500]; は「unsigned char」が500個連続しているので orig[0] = a; orig[1] = a; のように入ります。 また、aa、bbと入れた場合、今のソースでは(一部修正必要) orig[0] = a; orig[1] = b; orig[2] = b; となります。 >「aa」のように複数の文字列を1つのものとして入力することができません。 orig[0] に「aa」と格納できるものではありません。 どのように格納されるのが理想なのかがわかりませんが、最低でも、 ・入力した文字列に合わせて、次の格納先(orig[]の位置)をずらす ・二次元配列にする が必要だとは思いますが。 それと、 scanf("%s", orig[m]); ではなく scanf("%s", &orig[m]); です。 実行した場合に変な挙動をしていると思います。

sakyyy
質問者

お礼

丁寧なご回答ありがとうございます! >orig[0] に「aa」と格納できるものではありません そうなんですね、てっきり「500」の長さの文字が格納できるのだと勘違いしていました。 二次元配列が必要なんですね。 どうもありがとうございました!!

その他の回答 (1)

回答No.2

int m; unsigned char orig[40][500]; // 500文字入る場所が40個 for(m=0;m<40;m++){ // 40個しかないから40回まで scanf("%s", orig[m]); // scanf("%s", &orig[m][0]);と同じ意味 if(strcmp(orig[m],"E")==0) // if(strcmp(&orig[m][0],"E")==0)と同じ意味 break; }

sakyyy
質問者

お礼

迅速なご回答ありがとうございます! 2次元配列にしなければいけないんですね。 比較の仕方まで書いていただき、ありがとうございます!!

関連するQ&A