• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:超初心者の為、教えて下さい)

C言語学習2日目の超初心者の質問:for文の動作について

このQ&Aのポイント
  • C言語学習2日目の超初心者が、for文で作成したプログラムの動作について質問です。
  • プログラムを実行すると、最後に表示される数字がなぜ3:0になるのか疑問です。
  • また、for文が終わった後のprintfの中身の数字は、最後に処理された数字なのでしょうか。

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

  • ベストアンサー
  • KnKn9898
  • ベストアンサー率31% (40/127)
回答No.2

jはこの際関係ないので for(i=0;i<3;i++){ printf("%d\n" , i); } printf("%d\n" , i); //※ ということですね。 for(){}がやっていることはiの値を{}の最後にインクリメントして、{}の最初のところで評価するという動作です。したがってiの値は0,1,2,3となったところでi<3の条件に合わなくなってループから抜けます。iはこの関数のどこからでも参照されてしまうので、forループを抜けた後でも変更された値、つまり3を保持しています。なので//※のところのprintfでも3が表示されるのです。 この辺は「変数のスコープ」という話題になります。 なおC++ですともうちょっと別の書き方をしてforループ内だけで有効な変数を定義することもできます。

muro1192
質問者

お礼

>iの値は0,1,2,3となったところでi<3の条件に合わなくなってループから抜けます そういう考えなのですね。 最後の3が出てきたら、forの{}中のprintfは飛ばされて{}から3が抜け出すと考えればいいのですね。 今後ともご教授願います。 ありがとうございました。

その他の回答 (2)

  • yshr9442
  • ベストアンサー率43% (10/23)
回答No.3

補足説明をしようと思ったのですが、 No1,No2の回答者様ので十分ですね。 for文の中が実行されているのは、条件が当てはまるときだけですからね。 もしもiが0,1,2しか入らないならば、永久にfor文から抜け出せなくなってしまいます。 iが+1されて条件判定し、i=3になって初めて条件から抜け出し最後のprintfでi=3,j=0が出力されるということです。

muro1192
質問者

お礼

なるほど。とりあえず2を超えて3まで行ってしまうのですね。 そして3が条件と合わないのでループの外に飛び出すという考えなのですね。 ありがとうございました。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

for文を等価なwhile文に書き換えてみればはっきりします。 #include <stdio.h> int main(void) { int i; int j; i = 0; while ( i < 2 ) { scanf("%d", &j); printf("%d:%d\n", i, j); i++; } printf("%d:%d", i, j); return 0; } ループを抜けてもiのスコープは有効で3になっています。

muro1192
質問者

お礼

ありがとうございます。 whileでも同じなのですね。 iは2未満なので3なんか入るはずがない! と思っていましたが、 理解の仕方が間違っていたんですね。 今後とも是非宜しくお願いします。

関連するQ&A