- ベストアンサー
文字を逆転させて表示させるプログラミングなのですが・・・。
#include<stdio.h> int main() { char moji[80]; char hantai[80]; int i; int j; int n; printf("半角文字列を入力:"); scanf("%s",moji); for(n=0;moji[n]!='\0';n++); for(i=n-1,j=0,i>=0;i++;j--){ hantai[j]=moji[i]; } hantai[j]='\0'; printf("反対から:%s\n",hantai); return 0; } 反対からが表示されません。 考えたのですがわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
for(i=n-1,j=0,i>=0;i++;j--){ hantai[j]=moji[i]; } において、 iが初期値 n-1 でインクリメント jが初期値 0 でデクリメントになっています。 これがきっと逆ですね。 また、 , ; の位置がおかしいです。 (終了条件が i++ で判定され、 !=0 なので すぐに条件を満たしてしまいます) 初期設定;条件;実行後動作 なので for(i=n-1,j=0;i>=0;i++,j--){ とすべきだと思います。
その他の回答 (1)
- hegemon
- ベストアンサー率72% (21/29)
>反対からが表示されません。 >考えたのですがわかりません。 もうちょっと考えましょう。 > for(i=n-1,j=0,i>=0;i++;j--){ > hantai[j]=moji[i]; ここ、iがn-1でjは0から始まってます。 で、j--となってるので、hantai[j]はゼロから始まってマイナスへと値をセットしてます。 思いっきり、メモリ破壊してますね。 さらに、for文の表記もおかしいです。ループ継続条件が「i++」になってるので。 > for(n=0;moji[n]!='\0';n++); おそらく、ここで入力された文字列の最後をポイントしたいのでしょうから、この部分はこうすべきですね。 for(n=0; moji[n]!='\0'; n++); for(i=n-1,j=0; i>=0; i--,j++){ hantai[j] = moji[i]; どこが違うのか、よく見比べてみましょう。
お礼
よーく見比べたら分かりました!! ありがとうございます。
お礼
ありがとうございました。 納得です。 直してコンパイルしなおします。