重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

参考書を読んでいて分からないところが有りました。
「配列aの値を先頭から見ていき、その値が-1になるま配列bにコピーしていく。そのとき-1という値もコピーする。という処理をするものです。-1という値もコピーするため、このループは最低1回は実行されることになります。

i=0;
do{
b[i]=a[i];
}while(b[i++]!=-1);


この場合、a[0]が-1のときにはb[0]に-1がコピーされるかもしれませんが、そうでない場合は「そのとき-1という値もコピーする。」というのは出来ないと思うのですが、どなたかご教授宜しくお願いします。

A 回答 (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のコピーでよく使われます。
(コピー先にもストッパーをつけておくためです)
    • good
    • 0

while(b[i++]!=-1);



i++と書くと、i の値が参照されたあと i += 1 が実行されるため、b[i] == -1 も問題なくコピーされます。

while (1) {
 b[i] = a[i];
 if (b[i] == -1) break;
 i++;
}
と同義です。
    • good
    • 0

参考書が悪いのか貴方の解釈が悪いのかどっちと言われると??な気もしますが



例題の処理は配列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という値もコピーする」という但し書きがかかれているのです。

おわかりになりましたか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!