アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のプログラムにおいて,
for文の末尾にセミコロンがついているタイプ( for(...); )
のfor文の制御の流れは,セミコロンがついていないタイプ( for(...) )
と何が違うのでしょうか?
for文の末尾にセミコロンがないタイプのものしか知らないため,
セミコロンがつくことで流れに何が変化するか知りたいです.
御存知の方がいらしたら,教えてください.

【出力結果】
forの末尾にセミコロンがある
2100

forの末尾にセミコロンがない
700

/*+++++++ ソース ++++++++*/
#include <stdio.h>

int main()
{
 int s_tb1[3] = {60,100,150};
 int mg_tb[3] = {1,3,4};
 int i,size=80,base=600,mode=1,ext=100;

 for(i=0; size>s_tb1[i]; i++);
  printf("%d\n", (base+mode*ext)*mg_tb[i] );

 return(0);
}

A 回答 (2件)

for文は、


for(i=0; size>s_tb1[i]; i++)
の後に、一つの文を書くようになっています。

普通、ブロックが書かれてそれを繰り返すわけですが、
for(i=0; size>s_tb1[i]; i++);
の場合は、空文;を繰り返すことになります。
この場合繰り返している間は、次の
 printf("%d\n", (base+mode*ext)*mg_tb[i] );
は実行されません。

1.forの末尾にセミコロンがある

このとき、i==1のときループは終了します。
mg_tb[i] == 1
です。

2.forの末尾にセミコロンがない

i==0のときのprintf()文が実行され、同じくそれで終わりです。

・ 最も単純なケースで動作を確認してみたほうが確実です。
    • good
    • 0
この回答へのお礼

理解できました。
回答ありがとうございました。

お礼日時:2008/04/13 12:36

>セミコロンがつくことで流れに何が変化するか知りたいです.


printf("%d\n", (base+mode*ext)*mg_tb[i] );
が for ループを抜けた後に実行されるということです。
for 文の本体はブロックでなければ、一つの文しか実行されません。
この場合、その一つの文が「;」という空の文になります。

まぎらわしいので、for 文や if 文を書く場合は本体を {} で囲むようにしましょう。
    • good
    • 0

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