2017-05-29 8 views
0

ループは体を空にし、ヌルloop.Butを作成すると仮定されるための最後のセミコロンは、なぜこれが6セミコロンがループ本体を空にしていないのはなぜですか?

void main() 
{ 
    int i; 
    for(i=1;i<=5;i++); 
    { 
     printf("%d\n",i); 
    } 
} 
+2

を印刷しますnt文が実行される –

+1

5の代わりに1つの番号しか印刷されなかったのか、本当にループを取得しなかったのかと聞きたがります。 – zubergu

+1

セミコロン*で終わる空文がループ本体であると言う方がより正確でしょう。これはセミコロンの特別な場合や魔法の意味のようなものではありません。 * for *は何もしませんが、他の 'for'ループのようにあらゆる点で機能します。 –

答えて

1

を印刷していることは、ループiの終わりにはなりis.at 6とprintfがこれを行います。

11

ループ本体は、それ以外の場合は12345を印刷し、空です。しかし、ループヘッドはそれに反して実行され、各反復ではそれは増加する。i6に到達すると、<=5ではないループが終了します。ループの後にiを印刷するとi6と表示されます。インクリメントiはループの副作用です。

1

forループfor(i=1;i<=5;i++);は、forループ本体がno-opであっても、iを1から6までインクリメントして、正確に5回実行します。したがって、ここで:

{ 
    printf("%d\n",i); 
} 

プログラムは、それが6

1

あなたはnullをループの外int型を宣言しているので楽しい

#include <stdio.h> 

int main(void) 
{ 
    int i; 
    for (i = 1; i <= 5; i++) /* void */; 

    /* floating block one */ 
    { 
     int i = 42; /* new i, hides old i */ 
     printf("%d\n",i); 
    } 

    /* floating block two */ 
    { 
     printf("%d\n",i); 
    } 
} 
+0

これを説明してください@pmg –

+0

@Magnusこの空白を見てくださいmain() { int i;for(i = 1; i <= 5; i ++); { int i = 42; printf( "%d \ n"、i); } printf( "%d \ n"、i); } –

+0

42 42が印刷されますが、印刷されます42 6 –

1

のためにこれを試してみてくださいで、iの現在の値を表示します、値は増分ループの外に保存されます。

Read more about it here

セミコロンがループを終了したために、余分な括弧は、ここに何もしません。

Read more about brackets here.

+0

これは唯一知りたい、ありがとう –

1

それは非常に簡単です:

for(i=1;i<=5;i++);が、私は= 6は、forループを終了し、1〜5 に、5回実行し、新しい文が実行され、 "スコープ" されます。

printf("%d\n",i); 

ので、それは(何もしない)nullのループになりますが、それは6 `i`インクリメントんし、そのループは次のPRIを終了した後、6

関連する問題