2016-10-11 12 views
-9

これは静的変数を学習していた場所のコードです。whileループと静的変数

#include <stdio.h> 

/* function declaration */ 
void func(void); 

static int count = 5; /* global variable */ 

main() { 

    while(count--) { 
     func(); 
    } 

    return 0; 
} 

/* function definition */ 
void func(void) { 

    static int i = 5; /* local static variable */ 
    i++; 

    printf("i is %d and count is %d\n", i, count); 
} 

私がコンパイルされ、端末上でこれを実行し、この出力を得た

i is 6 and count is 4 
i is 7 and count is 3 
i is 8 and count is 2 
i is 9 and count is 1 
i is 10 and count is 0 

countの値が0に等しいとき、ループが停止しなかった理由私のクエリがありますか?なぜそれが負の無限大に向かっていないのですか?

+9

「while(0)」は何をしているのでしょうか? – juanchopanza

+3

http://en.cppreference.com/w/cpp/language/while – SingerOfTheFall

+6

'while'ループの定義を探します。条件が「偽」または「0」になるまで続きます。 – Gravell

答えて

0

あなたのコードで、あなたは

while (count--) 

とCに真を書いたので、0以外の偽のものをゼロとして定義されていると定義されます。 whileループは、カウントがゼロになると停止します。

4

0falseと等しいためです。

数が0になると、whileの状態はfalseになります。

0

ループが0になると、whileループでは偽のブール値としてカウントされ、停止するため停止します。

0

数値がtrueのときにが実行されます。この場合、正の数はtrueとして扱われます。一方、ゼロはfalseと解釈され、ループを停止します。

基本的にWhile(true)、何かをしてください。 falseに達すると、が()のループが停止します。

負になりたい場合は、ループの場合はが必要です。

#include <stdio.h> 

int main() 
{ 
    for(int i = 10; i > -10; i--) 
    { 
     printf("%d", i); 
    } 

    return 0; 
} 

それとも、あなたはしばらく()を使用する場合、あなたはそれをこのように実行する必要があります。

#include <stdio.h> 

int main() 
{ 
    int position = 10; 

    while(position > -10) 
    { 
     printf("%d", position); 
     position--; 
    } 

    return 0; 
} 
+2

"** forループを使用する必要があります"と同じ結果が得られるでしょう、なぜですか?それはより慣用的かもしれませんが、whileを使うことも同様に働きます:while(i> -10){printf(...);} - 私; } ' – hyde

+0

真実、私は自分の答えを広げました。 –

+0

あなたのコードには小さな問題があります: '10987654 ....'の間にスペースを入れずに数字を表示します。 – mch

0
0 == false 

そして

while (0) 

次にループ意志やめる。あなたもc++でポストをタグ付けされたので、私はCであなたの例を与える++ブール値がtrueまたはfalseいずれかとして抽出され、表現されboolalphaを、使用して


bool b = -5; 
cout << boolalpha << b; // outputs: true 

そして、 :

bool b = 0; 
cout << boolalpha << b; // outputs: false 
+0

あなたは 'boolalpha'が何をしているのかを説明する必要があります。そうでなければ、明確化するよりも混乱するかもしれません – user463035818

0

whileループは、その引数が "false"(0)と異なるまで実行されます。したがって、c ountは0に等しい、それは停止します。