2016-10-11 2 views
-9

Это код, из которого я изучал статическую переменную.while loop и static variable

#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. Это происходит до тех пор, пока условие не будет «false» или «0». – Gravell

ответ

0

, потому что в вашем коде вы написали

while (count--) 

и в С истинной определяется как нечто, отличное от 0 и ложь определяется как ноль. Цикл while останавливается, когда счетчик достигает нуля.

4

Потому что 0 равно false значение.

Когда количество станет равным 0, while состояние становится false.

0

Когда ваш цикл достигает 0, он останавливается, потому что в цикле while он считается ложным логическим значением, и поэтому он будет остановлен.

0

Пока() будет выполняться, когда значение true. В этом случае любое положительное число обрабатывается как true. С другой стороны, нуль интерпретируется как false, тем самым останавливая цикл.

В основном While(true), сделайте что-нибудь. Как только вы достигнете false, while() остановки цикла.

Если вы хотите пойти отрицательно, вам понадобится для().

#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

"** Нужно ** использовать для цикла", почему? Это может быть более идиоматично, но использование 'while' работает так же хорошо:' while (i> -10) {printf (...); --я; } ' – hyde

+0

Верно, я продлил свой ответ. –

+0

У вашего кода есть небольшая проблема: он будет печатать числа без пробелов между ними: '10987654 ....'. – mch

0
0 == false 

И когда

while (0) 

Тогда цикл будет стоп.


Поскольку вы помечено пост с c++ тоже, я дам вам пример в C++ с использованием boolalpha, где значения BOOL извлекаются и представлены в виде либо true или false:

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, он останавливается.