- ベストアンサー
do~while文がよくわかりません
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
判らないのは、「Do~While」文ではなく、演算子や変数ではないのですか? ++$i; は、$iをインクリメント(+1)しています。 $s += $i; は、別の書き方をすると $s = $s + $i; になります。 $iをインクリメントしていきその値を$sに足し込んでいるので、最初のループでは $s=$s+1; ($s=0+1); で$sには1が代入されます。 二回目のループでは $s=$s+2; ($s=1+2); で$sには3が代入されます。 これを$iが10未満の間続けるのが「Do~While」文のところです。
その他の回答 (2)
- hkd9001
- ベストアンサー率48% (99/204)
こんにちは。 …さて、このプログラムで変数「$s」に数値が足し込まれていく理由ですが、 じゃあ、実際に我々がコンピュータになったつもりで、変数の値を追いかけてみることにしましょうか(以下、文字が見やすいように全角文字で書いていきます)。 このプログラムは、 ++$i; … 変数「$i」の値に1を加え、それを新たに「$i」の値とする。 $s+=$i; … 変数「$s」の値に変数「$i」の値を加え、それを新たに「$s」の値とする。 という手続きを、9回繰り返すというものですよね。そうすると ------------------------------------------------------------------------------ 左側の実行文を実行した結果、 実行文 $iの値は $sの値は (1回目) ++$i; 1 $s+=$i; 1(0+1) (2回目) ++$i; 2 $s+=$i; 3(2+1) (3回目) ++$i; 3 $s+=$i; 6(3+3) (4回目) ++$i; 4 $s+=$i; 10(6+4) (5回目) ++$i; 5 $s+=$i; 15(10+5) (6回目) ++$i; 6 $s+=$i; 21(15+6) (7回目) ++$i; 7 $s+=$i; 28(21+7) (8回目) ++$i; 8 $s+=$i; 36(28+8) (9回目) ++$i; 9 $s+=$i; 45(36+9) ------------------------------------------------------------------------------ という感じになります。あくまでも ご参考までに。
お礼
長々と書いてくださってありがとうございます。 やはり$s+=$i;の解釈がまったくできていなかったです。ありがとうございました。
- Redpython
- ベストアンサー率56% (9/16)
こんにちは。 わたくしも edomin2004 殿のコメントと同じで、なぜ結果が足されていくのかが分からないのならば、do while 文の理解ではないでしょう。 edomin2004 殿のアドバイスをお読みになった後に、わたくしのコメントをお読み下さい。 <while 文の処理順序> while (判断) { 処理; } この場合、常に ”判断”にパスしているのなら、下記のような順序で動きます。 判断 1回目 処理 1回目 判断 2回目 処理 2回目 …… <do while 文の処理順序> do { 処理; } while (判断); この場合、常に ”判断”にパスしているのなら、下記のような順序で動きます。 処理 1回目 判断 1回目 処理 2回目 判断 2回目 …… つまり、while 文とは、まず ”判断”を行い、それに通過したら ”処理”に進めます。 一方、do while 文は、まず ”処理”を行い、次に ”判断”をしてもらうという訳です。
お礼
う~ん、その部分はOK!なんですよ。 やはり足されることに納得いかなかったんです。 回答ありがとうございました。
関連するQ&A
- do - while文
こんにちは、tomokooです。 下記の様にソースを書きました。 rsはResultSetです。 ---------------------------- while(条件A){ 処理; rs.next(); } while(rs.next()){ 処理; } ---------------------------- うまくプログラムは動いたのですが 結果を見て1行飛ばされることに気づきました。 だから ---------------------------- while(条件A){ 処理; rs.next(); } do{ 処理; }while(rs.next()}; ---------------------------- としたところ、処理の中の rs.getString(i); //iは初期化済み で落ちてしまいます。 whileでよくてdo-whileでだめなことってあるんですか? 結構困ってます。 ご存知の方はよろしくお願いします。
- 締切済み
- Java
- do while文の条件
do while文の条件にprintfを使う場合、これはありなんでしょうか? 内容:0が入力されていたら、whileのprintfを実行してからdoに戻る。0以外ならprintfを実行しないで処理を抜ける。 int i; do { printf("0以外の数字を入力してください。\n"); scanf("%d",&i); }while(i == 0 && printf("まじめに入力してください。\n"));
- 締切済み
- C・C++・C#
- 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という値もコピーする。」というのは出来ないと思うのですが、どなたかご教授宜しくお願いします。
- ベストアンサー
- C・C++・C#
- perlのdo-while文で抜け出せない
perlのwhile,do-while,last文に関する質問です。 1) code1のようなプログラムを作ったのですが eでdo_whileを抜け出すことができませんがなぜでしょうか。 ---code1(eで抜け出せない)(NG)--- my $sum=0; do{ my $a=<STDIN>; chomp($a); $sum=$sum+$a; }while($a ne 'e'); print $sum; -------------------------------- 2) 抜け出す方法をいろいろ試していたら while(1)にしてlastで抜けるようにすると code2ではeで抜け出すことができるように なりましたが、 do~while(1)にしたcode3では、 「Can't "last" outside a loop block at …」C というエラーが発生します。 code2とcode3はwhileがdo~whileになって 条件を見る位置がループの始めか終わりの 違いだけなのに、なぜ、code2ではOKで、 code3ではエラーになるのでしょうか。 ---code2(eで抜け出せる)(OK)----- my $sum=0; while(1) { my $a=<STDIN>; chomp($a); last if ($a eq 'e'); $sum=$sum+$a; }; print $sum; --------------------------------- ---code3(エラーになる)(NG)----- my $sum=0; do{ my $a=<STDIN>; chomp($a); last if ($a eq 'e'); $sum=$sum+$a; }while(1); print $sum; --------------------------------- よろしくお願いします。 Windows7 , ActivePerl(v5.16.3)
- ベストアンサー
- Perl
- Do whileとFor文の脱出処理について
はじめまして。 VBについて素朴な質問なのですが For…Nextから抜けるにはExit for を使いDo…Loopから抜けるにはExit Doを使用しますが以下の場合はFor文の中でExit doを使用するのは可能なのでしょうか? Do while(条件) for i=1 to 12 if 条件 then exit do end if 処理1 next i 処理2 loop 本来ならfor文の中ではExit forを使用しますがfor文はDo while文 の中に含まれていますのでExit doでも出れると思ったのですがそうではないのでしょうか?ご回答よろしくお願いします。
- 締切済み
- Visual Basic
- do - while 文
以下のコードをコンパイル後実行すると、0~9までの出現回数がわかるのですが、処理を続けますか?と出た後yを入力するともう一度 do 以降を実行するようにしたいのですが、yを入力する前にプログラムが終了してしまいます。何がいけないんでしょうか? #include <iostream> using namespace std; int main (void) { int i; char cont; char c; int count[10] = {0}; do{ while (cin.get(c)){ switch (c){ case '0': count[0]++; break; case '1': count[1]++; break; case '2': count[2]++; break; case '3': count[3]++; break; case '4': count[4]++; break; case '5': count[5]++; break; case '6': count[6]++; break; case '7': count[7]++; break; case '8': count[8]++; break; case '9': count[9]++; break; } } for (i =0; i < 10; i++) cout << i << "の出現回数は" << count[i] << "\n"; cout <<"処理を続けますか?(y/N)"; cin >>cont; }while (cont == 'y'); }
- ベストアンサー
- C・C++・C#
- while文とif文
#include <stdio.h> void main() { char str[2][6] = {"hello","lop"}; int i = 0; while(i < 2){ printf("%s\n", str[i++]); } } 上のプログラムの条件判定の部分にif文を つかうとhelloという文字列しか出力されず while文を使うとhelloとlop 二つ出力され ます。上の条件判定のif文にした時ととwhile 文にした時の違いはどこなのでしょうか?? どなたかご教授よろしくお願いしますm(_ _)m
- ベストアンサー
- C・C++・C#
- java while文です。教えてください(__)
public class mondai2{ //プログラム開始 public static void main(String args[]){ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int i; int ans=0; int seikai=0; for(i=0;i<5;i++){ try{ { Random ran = new Random(); int num1 = ran.nextInt(8)+1; int num2 = ran.nextInt(8)+1; ans = num1*num2; System.out.print("問題"+(i+1)+":"); System.out.print(num1 + "×" +num2 + "="); String s =in.readLine(); seikai = Integer.parseInt(s); if(seikai==ans){ System.out.println("正解"); }else{ System.out.println("不正解"); } } }catch(IOException e){ System.out.println("エラー"); } } } } このプログラムをwhile文か、do while文にして正解が出るまで問題が出続けるようにしたいんですけど、まったくわからなくて困っています>< 教えてください(+o+)
- ベストアンサー
- Java
- sendmailの$bodyの中にwhile文
php 初心者です sendmailでメール配信文を作っています。 配信はできたのですが、発信者の「発信しました」通知メールに 配信リストを掲載して送信したいと思っています。 そこでmb_send_mailの$bodyの中にwhile文を書こうと思って下記のように書いてみたのですが 当然ながら動きません。 下記のように$body = <<<EOM EOM;の中にwhile文を書けるのでしょうか? 書けるとしたらどのように書いたら宜しいのでしょうか? またはどのようにしたらwhile文で取得する配信リストをメールの中に入れることができますか? ご教授よろしくお願い致します。 $body = <<<EOM while ($i = mysql_fetch_array( $result)) { echo $i['name']; ;} EOM;
- ベストアンサー
- PHP
- 【シェル】while文の変数定義について
OS:Solaris10 sh:Bシェル お世話になります。 シェルの冒頭で定義した変数をwhile文の中で読み込ませたいです。 現状のシェルは下記の通りです。 ---- #!/bin/sh # *** 変数定義 *** AAA1=Spring BBB1=Summer AAA2=Autumn BBB2=Winter # *** メイン処理 *** i=1 while [ $i -le 2 ]; do AAA=AAA$i BBB=BBB$i echo ${AAA} echo ${BBB} i=`expr $i + 1` done ---- しかし、出力される結果は下記のようになってしまいます。 AAA1 BBB1 AAA2 BBB2 これを冒頭の「*** 変数定義 ***」で定義した値を読み込ませ、下記のような出力結果を得たいです。 Spring Summer Autumn Winter どうかご教授ください。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ありがとうございます。 そういえば、イマイチ$s += $i;のことがわかっていませんでした。 本にも$s = $s + $i;と書いていたのですが・・・・何となくよくわかりませんでした。何となく理解したつもりではいたのですが、本当は何もわかっていなかったんですね。ループだから2回目は1回目の続きになっていると思って良いのですね。