• ベストアンサー

文字列を後ろから1文字ずつ表示する

初歩的なプログラミングです。 C言語の勉強中で、タイトルの通りの プログラムを作りたいのですが、 何かヒントを頂けないでしょうか。 自分で書いてみて失敗したのは下記の 通りです。 char s[11]; int i=0; printf("文字列入力(10文字以内-->)"); gets(s); printf("s=%s",s); while(s[i]!='\0'){ i++; } while(i=0){ printf("%c\n",s[i-1]); i--; } 宜しくお願いします。

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

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

最後の表示部分のwhileの条件がおかしいですね。 while(i=0){ printf("%c\n",s[i-1]); i--; } では、iに0を代入した真偽を見て、真ならループする様になっています。 while(i>0){ printf("%c\n",s[i-1]); i--; } でうまくいくでしょう。

akiko-um
質問者

お礼

動作しました! ありがとうございます。

その他の回答 (2)

  • elttac
  • ベストアンサー率70% (592/839)
回答No.3

 失礼しました。No. 2 の回答に誤りです。  - ループの最初で i に 0 を代入  - ここで,「i = 0」の式の値は 0。0 は「偽」なので while ループは実行されない が正しい動作です。失礼いたしました。

akiko-um
質問者

お礼

動作しました! ありがとうございます。

  • elttac
  • ベストアンサー率70% (592/839)
回答No.2

 2 番めの while ブロックの条件式が間違えています。  「=」演算子は代入です。ですから,  - ループの最初に i に 0 を代入  - printf("%c\n", s[0 - 1]); この時点で,s[-1] というありえない配列要素にアクセスしてエラーとなります。  while ループの停止条件は,「i が 0 を超えていたら」ですから,  while (i > 0) { とすればよいでしょう。いかがでしょうか。