• ベストアンサー

文字を逆転させて表示させるプログラミングなのですが・・・。

#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; } 反対からが表示されません。 考えたのですがわかりません。

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

  • ベストアンサー
回答No.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--){ とすべきだと思います。

tomo_ko_n
質問者

お礼

ありがとうございました。 納得です。 直してコンパイルしなおします。

その他の回答 (1)

  • hegemon
  • ベストアンサー率72% (21/29)
回答No.1

>反対からが表示されません。 >考えたのですがわかりません。 もうちょっと考えましょう。 >  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]; どこが違うのか、よく見比べてみましょう。

tomo_ko_n
質問者

お礼

よーく見比べたら分かりました!! ありがとうございます。

関連するQ&A