2016-07-31 4 views
-1

Я создал программу на C++, которая запрашивает любой целочисленный ввод. Программа вылетает только после двух итераций. Код ниже:только один оператор под оператором if, выполняющийся

#include<iostream> 

int main() 
{ 
    int user_choice; 
    std::cout <<"Please enter any number other than five: "; 
    std::cin >> user_choice; 

    while(user_choice != 5) 
    { 
     std::cout <<"Please enter any number other than five: "; 
     std::cin >> user_choice; 
     if(user_choice == 5) 
      std::cout << "Program Crash"; 
      break; 
    } 
    std::cout << "I told you not to enter 5!"; 
    return 0; 
} 

Затем я попытался сделать это:

if(user_choice == 5) 
    std::cout << "Program Crash"; 
    //std::cout << "Shutting Down"; 

Который работал. Почему комментирование второй строки заставляет программу работать нормально?

+2

'if (condition) {statement1; оператор2; } ' – LogicStuff

+0

@LogicStuff Не могли бы вы объяснить, что вы прокомментируете немного больше? –

+1

. К вашему коду добавляется больше, чем вы сравниваете' user_choice' с буквами '5', когда вы должны делать' user_choice == right_answer'? Почему вы чувствуете необходимость назначать 'right_answer'' user_choice', если они уже равны? Вы также закодировали '5' в выходные сообщения ... – LogicStuff

ответ

2

Этот код:

if (counter == 10) 
    std::cout << "Wow you still have not entered 5. You win!"; 
    user_choice = right_answer; 

Является ли eq uivalent к:

if (counter == 10) 
{ 
    std::cout << "Wow you still have not entered 5. You win!"; 
} 
user_choice = right_answer; 

Ваша проблема становится очевидной, user_choice = right_answer не выполняется только тогда, когда counter == 10. Таким образом, переместите его внутри блока if() { ... }:

if (counter == 10) 
{ 
    std::cout << "Wow you still have not entered 5. You win!"; 
    user_choice = right_answer; 
} 
+2

@ Mr.Python Определенно нет, если вы еще этого не сделали, получите книгу на C++. Вы не можете перескакивать на C++ и применять конструкции с других языков ... у вас возникают такие проблемы. – user2296177

+0

@ Mr.Python Я рекомендую посмотреть «область» там. – user2296177

+1

Да, удивительно, как на самом деле изучение языка делает вас лучше. –

1

C++ не относится к отступу; поэтому, когда вы пишете:

if (counter == 10) 
    std::cout << "Wow you still have not entered 5. You win!"; 
    user_choice = right_answer; 

компилятор видит:

if (counter == 10) 
    std::cout << "Wow you still have not entered 5. You win!"; 
user_choice = right_answer; 

Чтобы поместить оба заявления под if, вам нужно брекеты:

if (counter == 10) { 
    std::cout << "Wow you still have not entered 5. You win!"; 
    user_choice = right_answer; 
} 
Смежные вопросы