はじめまして。
C言語を学習中です。
参考書の例文に、自分なりにコメントを付けて読み進めましたが、どうしても下記のfor文の処理が理解ずに困っております。
for (j = 0;j < i;j++) printf("%d\n",val[j]);
なぜval[j](ジェイ)が出てくるのかがわかりません。
val[j](ジェイ)はval[i](アイ)とどのような関連性があるのでしょうか。
また、最後のfor文はどのような処理をしているのでしょうか。
どうか教えていただきたく、お願い致します。
●例文
次のプログラムは、入力された数値の一覧を表示する例です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
int i,j,val[10];
char str[32],*ch;
fgets(str,sizeof(str),stdin);/*キーボードで入力された文字列strを読込む*/
ch = strtok(str,",\n"); /* 文字列strの中から単語を取り出して変数chに代入*/
for (i = 0;i < 10;i++) { /*for文(初期化i=0;条件式i<10;更新i++)*/
if (ch == NULL) { /*文字列strの中に単語が無ければ*/
break; /*ループを抜ける*/
} else { /*文字列strの中に単語があれば*/
val[i] = atoi(ch); /*文字列strの中の最初の単語を数値に変換して配列valの
i要素に代入する*/
}
ch = strtok(NULL,",\n"); /*文字列strの中の次の単語を取り出す*/
}
for (j = 0;j < i;j++) printf("%d\n",val[j]);
return;
}
このプログラムの実行結果は次の通りになります。
85,41,26,956,12 入力した文字列
85
41
26
956
12
No.2ベストアンサー
- 回答日時:
配列の[]の中は、その値が重要です。
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までの整数。順番に */
とか
No.3
- 回答日時:
配列の要素を指定することができれば、なんでもいい。
所詮、ただの変数名だし。
i でも j でもいいし yanbarukuina でもいい。
最後のfor は、 配列valの要素を一つずつ printfで表示させてるだけでしょ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
n重のfor文にするには?
-
エクセルVBAで Do While (1)って?
-
入力した文字列から母音だけを...
-
HEWのバグ?
-
for文を使ったプログラムで...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
CTRL+Dでループを抜けるには
-
「指定されたキャストは有効で...
-
ある商品のロス率を5%見込み、...
-
変数とパラメータとは違うもの...
-
プログラムでの数字につく”f”の...
-
信頼区間の1.96や1.65ってどこ...
-
C言語での引数の省略方法
-
CStringのFindで文字列検索を行...
-
Eclipseコンソール表示を、リセ...
-
Enterキーを押されたら次の処理...
-
変数の値がおかしくなる
-
反転した数値を表示させるやり方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループを途中で抜けたいのですが。
-
do-while文が禁止される理由
-
break文でループを一気に抜ける...
-
For文の終了値を関数にしても問...
-
UWSCにてある一定の動作を無限...
-
エクセルVBAで Do While (1)って?
-
入力した文字列から母音だけを...
-
入力した数値を倍々するプログラム
-
PIC のプログラムについて ど...
-
放電現象の2分法C言語プログラ...
-
C言語forループが完結した場合...
-
Delphiで・・・
-
While文の終わりにセミコロンが...
-
他言語で言うcontinue文
-
n重のfor文にするには?
-
フラッシュ暗算
-
for文while文の無限ループの違...
-
ループの特定入力終了
-
PAD図の書き方
-
Excel VBAで年度をまたぐ期間の...
おすすめ情報