- ベストアンサー
C言語でキーボードから入力された文字列を表示する方法
- C言語でキーボードから入力された文字列を表示する方法について質問があります。参考書の例文を読み進めている中で、特定のfor文の処理が理解できません。
- 質問の内容は、for文の処理についてです。具体的には、なぜval[j]が出てくるのかと、最後のfor文がどのような処理をしているのかがわからないということです。
- プログラムの実行結果は、キーボードから入力された文字列の数値一覧です。具体的には、85,41,26,956,12という文字列が入力された場合、それぞれの数値が改行されて表示されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
配列の[]の中は、その値が重要です。 val[i]だろうがval[j]だろうがval[nanika]だろうが、その[]の中を評価(計算)した最終的な値だけが関係します。 > なぜval[j](ジェイ)が出てくるのかがわかりません。 ↓のjの値を使いたいからです。 > for (j = 0;j < i;j++) printf("%d\n",val[j]); int k;を使うなら for (k = 0;k < i;k++) printf("%d\n",val[k]); int nanika;を使うなら for (nanika = 0;nanika < i;nanika++) printf("%d\n",val[nanika]); です。「j」には意味はありません。 > val[j](ジェイ)はval[i](アイ)とどのような関連性があるのでしょうか。 valは配列の名前です。 j==i ならval[j]==val[i] という関連があります。 > また、最後のfor文はどのような処理をしているのでしょうか。 見たままの処理です。単純にforループで、printfを繰り返しているだけです。 Cの文法では、forに{}は必ずしも必要ではありません。繰り返す式文が一つだけのときは、{}はいりません。 このとき、iは、その前にある > for (i = 0;i < 10;i++) { /*for文(初期化i=0;条件式i<10;更新i++)*/ のループ終了時のiになります。このループの終了は、 i<10を満さなくなったときと、 > break; /*ループを抜ける*/ でループを抜けたときです。 それぞれ、iが何になるか、考えてみましょう。考えてわかなかったら > ch = strtok(NULL,",\n"); /*文字列strの中の次の単語を取り出す*/ > } printf("i:%d\n",i) ; /*ループ終了時のiを表示 */ > for (j = 0;j < i;j++) printf("%d\n",val[j]); とでもして確認してください。 ※ ところで /*for文(初期化i=0;条件式i<10;更新i++)*/ というコメントはよくありません。プログラムをただ書き写しただけ。なんの説明にもなってません。 何のためのものか、どんな意味があるのか、を考えるようにしましょう。例えば /* i = 0から9までの整数。順番に */ とか
その他の回答 (2)
- bajutsu
- ベストアンサー率20% (139/693)
配列の要素を指定することができれば、なんでもいい。 所詮、ただの変数名だし。 i でも j でもいいし yanbarukuina でもいい。 最後のfor は、 配列valの要素を一つずつ printfで表示させてるだけでしょ。
お礼
ご回答いただき、ありがとうございました。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
ただのカウンタじゃないんですか? val配列の要素数はiが把握してますが、それを1つ1つ取り出したいが為に、 jを利用してiまで繰り返してるようにしか見えません。 最後のループでval[i]を出力しようとしても要素数を超えた(つまりi=10)のエラー、 もしくは初期化されていない何かしらの値、しか出力されないでしょう。 valは、val[0]~val[i-1]までしか入力した値が入っていませんので。
お礼
ご回答いただき、ありがとうございました。 参考になりました。
お礼
ご回答いただき、ありがとうございました。 勉強になりました。