Почему я получаю бесконечный цикл?

Мой вывод неоднократно печатает положительный или отрицательный результат. Почему я получаю бесконечный цикл? Я использовал следующее:

include iostream 
using namespace std; 

int main()
{
    int num;

    cout<<"enter number"<<endl;
    cin>>num;

    while(num!=0)
    {
        if(num>0)
            cout<<"positive"<<endl;
        else
            cout<<"negative"<<endl;
    }

    return 0;
}

person Ka112324    schedule 04.11.2012    source источник


Ответы (6)


На основе ответа madflame991 здесь улучшенная версия :)

include iostream 
using namespace std; 

int main()
{
    int num;

    do
    {
        cout<<"enter number"<<endl;
        cin>>num;

        if(num>0)
            cout<<"positive"<<endl;
        else
            cout<<"negative"<<endl;
    }while(num!=0);

    return 0;
}
person Jonathan    schedule 04.11.2012

Потому что у вас есть while(num!=0) и ничто не может изменить его значение в цикле.

person Michael Krelin - hacker    schedule 04.11.2012

Значение num не меняется в теле цикла.

person Chris Dargis    schedule 04.11.2012

Вы должны изменить значение num внутри цикла, потому что условие цикла while никогда не станет ложным.

person pascalhein    schedule 04.11.2012

Вам также нужно прочитать значение в цикле. Если вы этого не сделаете, то num не изменится и навсегда останется прежним, и, следовательно, вы либо получите бесконечный цикл, либо ничего (для num==0)

{int num;

cout<<"enter number"<<endl;
cin>>num;

while(num!=0)
{
    cout<<"enter number"<<endl;
    cin>>num;

    if(num>0)
        cout<<"positive"<<endl;
    else
        cout<<"negative"<<endl;
}
return 0; }
person adrianton3    schedule 04.11.2012

Это из-за логики вашего кода. Сначала вы читаете число из стандартного ввода, а затем создаете цикл while на основе условия, что число не равно 0. Поэтому, если значение num, переданное через стандартный ввод, не равно 0, ваша программа повторит тело цикла. опять и опять.

В этом коде сам цикл while не нужен. Если вы просто хотите напечатать сообщение пользователю в зависимости от того, является ли число положительным/отрицательным, вы можете просто оставить часть if/else и избавиться от цикла while следующим образом:

    using namespace std; 
    int main() {

    int num;

    cout<<"enter number"<<endl;
    cin>>num;

    while(num!=0)
    {
        if(num>0)
            cout<<"positive"<<endl;
        else
            cout<<"negative"<<endl;
    }

    return 0; 
}

Другой возможностью может быть возможность пользователя ввести число несколько раз и разорвать цикл while при определенных условиях, например:

using namespace std; 
int main() {

int num;

do {
cout<<"enter number"<<endl;
cin>>num;
   if(num>0)
        cout<<"positive"<<endl;
    else if(num < 0)
        cout<<"negative"<<endl;
} while(num!=0);

return 0; 

}

Здесь цикл завершится, если число равно 0. Вы также можете явно выйти из цикла с помощью оператора break на основе некоторого условия.

person akhilless    schedule 04.11.2012