• ベストアンサー

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という値もコピーする。」というのは出来ないと思うのですが、どなたかご教授宜しくお願いします。

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

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.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)
回答No.2

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)
回答No.1

参考書が悪いのか貴方の解釈が悪いのかどっちと言われると??な気もしますが 例題の処理は配列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という値もコピーする」という但し書きがかかれているのです。 おわかりになりましたか?

関連するQ&A