OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

do-while文について

  • すぐに回答を!
  • 質問No.196608
  • 閲覧数47
  • ありがとう数0
  • 気になる数0
  • 回答数3
  • コメント数0

参考書を読んでいて分からないところが有りました。
「配列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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル14

ベストアンサー率 30% (2593/8599)

質問のプログラムを文章で書くと、
(1)i=0を実行する。
(2)a[i]をb[i]にコピーする。
(3)b[i]が-1なら、i=i+1を実行してループを抜ける。
(4)そうでなければ、i=i+1を実行して(2)へ飛ぶ。
となりますね。

これでお分かりのように、コピーして判定してからiを増やしています。
だからTEXTのストッパー(-1)は、必ず(余分に)コピーされます。
このやり方は可変長のTEXTのコピーでよく使われます。
(コピー先にもストッパーをつけておくためです)
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 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が入っていま ...続きを読む
参考書が悪いのか貴方の解釈が悪いのかどっちと言われると??な気もしますが

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

おわかりになりましたか?


  • 回答No.2
レベル12

ベストアンサー率 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++; } と同義です。
while(b[i++]!=-1);

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

while (1) {
 b[i] = a[i];
 if (b[i] == -1) break;
 i++;
}
と同義です。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ