• ベストアンサー

While文の終わりにセミコロンが無いのは?

単純な質問なのですが、 do { .... } while(...); とdo-while文は最後にセミコロンがあるのに while(...) { ... } とwhile文にはなぜ最後にセミコロンが無いのでしょうか。 文法だからしょうがないのでしょうか。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

{ }を使った複文になっているのでセミコロンがありません while(i) printf("%d\n", i--); 単文だけなら必要です

dqk10254
質問者

お礼

早速ご回答ありがとうございます。{}が複数の分を扱っている肝心な規則を忘れていました。また、単文ならセミコロンが必要なことも教えていただきありがとうございます。

その他の回答 (1)

  • shred
  • ベストアンサー率35% (25/70)
回答No.1

whileと{}をセットで覚えてしまうとそのような誤解が生まれると思います。 while 式 と考えれば良いかと思います。複数の式も式です。 そのようなときに{}で括るので;が無くなったように思ってしまってるのだと思います。

dqk10254
質問者

お礼

早速ご回答ありがとうございます。{}が複数の式を扱っているという肝心な規則を忘れていました。

関連するQ&A

  • Java do while文

    do while文を使って、int num = new Random().nextInt(10);を利用して、ランダム数値が2で割り切れるか0だったらwhile文を終わらせるdo-while文を作成したいのですが、わかりません。わかる方、教えてください。お願いします。

  • コロンとセミコロン

    論文などを見ていると、ある文章の後にコロンを置いて その詳しい説明を何文かセミコロンで区切って並べるというのを見ますが、 これは正しい用法と理解していいんでしょうか? セミコロンだけで考えると前節の原因や結果を示すときに使うものですが、 質問の場合はコロンで続いている文なので、各文をセミコロンで区切っていると考えていいのでしょうか? この場合、コロンの後もセミコロンの後も大文字で始まっているんですが 正しいですか?

  • do~while文がよくわかりません

    今参考書で勉強しているのですが、do~while文がよくわかりません 。コードは下記のようになります。どうして前の処理結果が足されていくのか理解できません。こんな馬鹿にどうかわかりやすくご教授していただけないでしょうか!? <?php $s = $i = 0; do{ ++$i; $s += $i; }while($i < 10); print "1 から $i までの和は $s"; ?>

    • ベストアンサー
    • PHP
  • switch文とwhile文を用いたプログラムに関して

    swich文とwhile文を用いたプログラムについて 授業の課題で、swich文とwhile文を用いたプログラムを作りなさい。いう課題が出ました。 5桁以上9桁以下の正の整数を入力し、4で割り切れたとき、何桁の数字かを出力。4でわって1余ったとき、すべての桁の合計を出力。3余ったとき、与えられた数の逆を変数に代入し、その変数を出力(単純に表示するわけではなく、数字として表示) といったものです。 途中からの授業参加で、C言語に関する知識はほとんどありません。do文を用いたプログラムは見つけれたのですが、while文とswich文を用いろということなので、do文は使えないです。 どなたか教えていただけませんか? 今日中にわからないとちょっとやばいです・・・。 よろしくお願いします

  • do-while文が禁止される理由

    コーディング規約の中でdo-while文の使用が禁止されている例をよく見かけます。 確かに、 while(1){ ・・・ if(・・・){ break; } } とした方が判りやすく運用の柔軟性も高いと思いますが、 do-whileはそんなに可読性を落としてしまうものなのでしょうか?

  • CGI勉強中です(do文while文)

    プログラミング初心者です。  do文とwhile文はほとんど同じ動作をするようですが、プログラミングする時にごちゃまぜにして記述しても大丈夫なのでしょうか?

    • ベストアンサー
    • Perl
  • 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"));

  • pascalにおけるwhile文の条件について

    「cがA,B,Cのどれかの場合はwhile文の内容を繰り返す」というプログラムは while c in ['A','B','C'] do begin ~ end; と書けますが、「cがA,B,Cのどれかで無い場合はwhile文の内容を繰り返す」というプログラムはどのように書けばよいのでしょうか。私は while not c in ['A','B','C'] do begin ~ end; だと思ったのですが、エラーが発生したのでどうやら違うようです。 わかる人がいれば教えてください。よろしくお願いします。

  • 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でも出れると思ったのですがそうではないのでしょうか?ご回答よろしくお願いします。

専門家に質問してみよう