2016-07-31 1 views
-1

J'ai créé un programme en C++ qui demande une entrée entière. Le programme se bloque après seulement 2 itérations. Le code est ci-dessous:une seule instruction sous instruction if en cours d'exécution

#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; 
} 

J'ai alors essayé de faire ceci:

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

Ce qui a fonctionné. Pourquoi commenter la deuxième ligne, le programme fonctionne-t-il correctement?

+2

'if (condition) {instruction1; statement2; } ' – LogicStuff

+0

@LogicStuff Pourriez-vous s'il vous plaît vous expliquer comment vous commentez un peu plus –

+1

Il y a plus dans votre code, par exemple, pourquoi comparez-vous' user_choice' avec '5' littéral, alors que vous devriez faire' user_choice == right_answer'? Pourquoi ressentez-vous le besoin d'assigner 'right_answer' à' user_choice' s'ils sont déjà égaux? Vous avez également codé '' 5'' dans les messages de sortie ... – LogicStuff

Répondre

2

Ce code:

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

Est eq uivalent à:

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

Votre problème se manifeste, user_choice = right_answer n'est pas exécutée que lorsque counter == 10. Ainsi, déplacez-le à l'intérieur du bloc if() { ... }:

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

@ Mr.Python Certainement pas, si vous ne l'avez pas déjà fait, obtenir un livre C++. Vous ne pouvez pas sauter en C++ et appliquer des constructions à partir d'autres langages ... vous avez des problèmes comme ceux-ci. – user2296177

+0

@ Mr.Python Je recommande de rechercher "portée" là-bas. – user2296177

+1

Oui, c'est incroyable de voir comment l'apprentissage de la langue vous permet d'être meilleur. –

1

C++ ne respecte pas l'indentation; donc quand vous écrivez:

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

le compilateur voit:

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

Pour mettre les deux déclarations sous la if, vous avez besoin d'accolades:

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