}```C
文字列sをn回だけ連続して表示する関数
void put_stringn(const char s[], int n)
{
int i;
for (i = 1; i <= n; i++)
{
for (i = 0; s[i] == '\0'; i++)
{
printf("%s", s[i]);
}
}
どこがいけないのかわからないです(-_-;)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
原因(1):
内側のForループの継続条件が間違えている。
質問のコードの内側のforループの部分は、以下のようになっています。
C
1for (i = 0; s[i] == '\0'; i++) 2{ 3 printf("%s", s[i]); 4}
ここで、s[]は文字列、すなわち'\0'を終端とするCharの配列です。
普通、空文字列('\0'だけの配列)を表示しようとはしません(表示する文字がありませんからね)。
だから、s[0]は'\0'ではありません。
そうすると、forループの最初(i=0の時)で、s[0] == '\0' が成り立ちませんから、"printf("%s", s[i]);"が実行されないまま、forループが終わってしまっているのです。(当然、何も表示されません)
文字列('\0'を終端とするCharの配列)を表示したいのであれば、最初から順に1文字ずつ表示していくというのを'\0'が現れるまで続ければ良いですよね。
そうすると、forループを続ける条件は、s[i] == '\0'ではなく、s[i] != '\0'にしないといけないという事に気づくはずです。
また、1文字表示するのですから、printfのフォーマットは、"%s"ではなく"%c"です。
コードを修正すると、
C
1for (i = 0; s[i] != '\0'; i++) 2{ 3 printf("%c", s[i]); 4}
これが、文字列を一回表示するコードです。
( 上記コードを「printf("%s",s);」と一行で済ませることもできますが、それではプログラムの練習にならないですよね)
原因(2):
2つのforループで、iがループ変数として使われている。
質問のコードには二重になったforループがありますが、どちらのforループもループ変数としてiを使っているのは問題です。
内側のforループは、上で説明したように i=0でループが終わります。外側のforループで、i++ とiを増やしても、内側のforループで i=0に戻ってしまいますから、外側のforループは終わることがありません。(質問のコードを実行したら、いつまで経っても終わらないです)
この問題は、forループごとに、違うループ変数を使うことで解決できます。
以上の修正をすると、コードは以下のようになります。
/* 文字列sをn回だけ連続して表示する関数 */ void put_stringn(const char s[], int n) { int i; // 外側のforループのループ変数 int j; // 内側のforループのループ変数 (追加しました) for (i = 1; i <= n; i++) { for (j = 0; s[j] != '\0'; j++) // jをループ関数として使います { printf("%c", s[j]); } }
投稿2018/04/27 13:30
総合スコア6915
0
ベストアンサー
なぜ二重ループにしてるんです?
C
1for(int i = 0; i < n; ++i) { 2 printf("%s\n", s); 3}
逆に二重ループを使いたいなら、ループカウンタは分けないといけません。
C
1for(int i = 0; i < n; ++i) { 2 for(int j = 0; str[j] != '\0'; ++j) { 3 printf("%c", str[j]); 4 } 5 printf("\n"); 6}
それ以外にもおかしな点を修正しています。
- 内側のループの継続条件
- 出力する際の書式指定子
投稿2018/04/27 12:44
編集2018/04/27 12:49総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
一応、
printf("%s", s[i]);
文字列を出力しようとしていますが、 ("%s")
s[i] は、文字です。 (違いが分かりますか?)
投稿2018/04/27 12:55
総合スコア6383
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。