- ベストアンサー
do-while文について
参考書を読んでいて分からないところが有りました。 「配列aの値を先頭から見ていき、その値が-1になるま配列bにコピーしていく。そのとき-1という値もコピーする。という処理をするものです。-1という値もコピーするため、このループは最低1回は実行されることになります。 i=0; do{ b[i]=a[i]; }while(b[i++]!=-1); 」 この場合、a[0]が-1のときにはb[0]に-1がコピーされるかもしれませんが、そうでない場合は「そのとき-1という値もコピーする。」というのは出来ないと思うのですが、どなたかご教授宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
質問のプログラムを文章で書くと、 (1)i=0を実行する。 (2)a[i]をb[i]にコピーする。 (3)b[i]が-1なら、i=i+1を実行してループを抜ける。 (4)そうでなければ、i=i+1を実行して(2)へ飛ぶ。 となりますね。 これでお分かりのように、コピーして判定してからiを増やしています。 だからTEXTのストッパー(-1)は、必ず(余分に)コピーされます。 このやり方は可変長のTEXTのコピーでよく使われます。 (コピー先にもストッパーをつけておくためです)
その他の回答 (2)
- yatokesa
- ベストアンサー率40% (201/496)
while(b[i++]!=-1); i++と書くと、i の値が参照されたあと i += 1 が実行されるため、b[i] == -1 も問題なくコピーされます。 while (1) { b[i] = a[i]; if (b[i] == -1) break; i++; } と同義です。
- yanmaa
- ベストアンサー率45% (207/457)
参考書が悪いのか貴方の解釈が悪いのかどっちと言われると??な気もしますが 例題の処理は配列Aの内容を配列Bに代入するロジックよね? 但し終了条件はb[i++]!=-1の時ですからa[i]に-1が入っている所まで代入しますよ。 例えば a[]={1,10,3,-1,5} とする時bには b[0]=1 b[1]=10 b[2]=3 b[3]=-1 となります、b[3]に-1が入っていますよね? だから「そのとき-1という値もコピーする」という但し書きがかかれているのです。 おわかりになりましたか?