• ベストアンサー

これのどこがおかしいのでしょうか?

文字を読み取って逆の順序表示するというのを作っているんですが、 コンパイルして実行すると、文字入力できずに終了してしまいます 自分が見る限りではどこがおかしいのかわかりません>< どうすればいいのでしょうか? #include <stdio.h> #include <conio.h> int main (void) { int a; char ch[31]; printf("文字列を読み取ります。入力してください。\n"); printf("30字まで読み取ります"); for(a = 0; a == 31; a++){ ch[a] = getche(); if(ch[a] == '\r'){ a = a; break; } if(a == 30) a = a; } printf("\n"); for(;a > 0;a--) { printf("%c ",ch[a]);  }   return 0; }

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

  • ベストアンサー
回答No.3

まず、下のfor文に問題があります。 for(a = 0; a == 31; a++) for文は for( 前処理 ; 継続条件 ; 後処理 ) です。 分かりやすくWhile文に置き換えると a = 0; while( a == 31){  処理;  a++; } となります。 aに0を代入した後に、ループへ入るのですが 継続条件は”aが31の時”です。 つまり一度もループせずに抜けてしまいます。 ですのでfor文を for(a = 0; aが31未満/aが31でないとき; a++) にすると良いでしょう。 あと逆向きに表示するためのループにも問題あります。 for(;a > 0;a--) これではaが1までしかループしません。 0までループするようにfor文の継続条件を a >= 0 、 a > -1 なり変更すると良いでしょう。

M_icrosoft
質問者

お礼

詳しくありがとうございます。 初歩的すぎるミスでした・・・ そのとおりにしたところ見事にちゃんと動きました。 回答ありがとうございました。

その他の回答 (2)

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

>for(a = 0; a == 31; a++){ aが31の時だけforループが動作する。 ちなみに、上記以外にも表示の方のループにも問題はあるから。

M_icrosoft
質問者

お礼

>aが31の時だけforループが動作する。 これを忘れておりました。 表示の方は、forの a > 0;  ですかね?

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>for(a = 0; a == 31; a++){ 1)aに0を代入する。 2)aと31が等しいかどうか判定する。 2)のところで判定結果が偽となり、いきなりfor文ループを抜けてしまいます。 判定条件を見直してください。 ところで、 >a = a; この代入文は、結果として「何もしていません」。 何を意図した文でしょうか?

M_icrosoft
質問者

お礼

なるほど そこがだめだったんですね。 しかしちょっと勘違いしておりました・・・ 勘違いを直せてよかったです。 a = a; の部分は気にしないでください・・・w 回答ありがとうございました。

関連するQ&A