2017-09-20 4 views
-4

Ecrivez un programme qui continue à demander à l'utilisateur d'entrer n'importe quel nombre autre que 5 jusqu'à ce que l'utilisateur entre le numéro 5. Puis dites à l'utilisateur "Hé, vous n'étiez pas censé entrer 5! " et quittez le programme.Problème avec un défi de codage débutant

★ Modifier le programme de sorte qu'après 10 itérations si l'utilisateur n'a pas encore entré 5, il dira à l'utilisateur "Wow, vous êtes plus patient que moi, vous gagnez". et sortie.

★★ Modifiez le programme pour qu'il demande à l'utilisateur d'entrer un nombre autre que le nombre égal au nombre de fois qu'il lui a été demandé d'entrer un nombre. (c.-à-d. sur la première itération "S'il vous plaît entrer un nombre autre que 0" et sur la deuxième itération "S'il vous plaît entrer tout autre numéro que 1" m etc etc Le programme doit se comporter en conséquence lorsque l'utilisateur entre le numéro demandé à.)

J'ai obtenu la plupart du programme pour fonctionner. Je l'ai à un point où il demande un numéro commençant à 0 et remontant, il donne à l'utilisateur le message du patient après 10 essais, et quitte le programme s'ils entrent le numéro qu'ils ne sont pas censés. Cependant si l'utilisateur entre le numéro au-dessus de ce qu'il vous dit de ne pas entrer, le programme se termine sans message. Je ne sais pas vraiment quoi chercher pour résoudre ce problème. J'ai cependant essayé de déplacer certaines choses et j'ai éliminé certaines variables redondantes.

Tous les conseils seraient appréciés, s'il vous plaît ne me donnez pas la réponse à l'avant! Voici ce que j'ai jusqu'ici.

#include <iostream> 


int main() 
{ 
    const int GUESS = 1; // constant for number of tries 
    const int PATIENCE = 10; // constant for message at 10 tries 
    int UserNum; // player input 
    int InputNum = GUESS; // intializes GuessNumber 


    // asks for player input 
    do 
    { 
     std::cout << "Enter any number other then "<< InputNum << ": "; 
     std::cin >> UserNum; 

     // exits program if user inputs the number displayed 
     if (UserNum == InputNum) 
     { 
      std::cout << "Hey! you weren't supposed to enter " << InputNum << "!\n"; 
     } 
     // increase the Guess counter if they dont enter the number displayed 
     else if (UserNum != InputNum) 
     { 
      InputNum++; 

     } 

     if (InputNum == PATIENCE) 
     { 
      std::cout << "Wow, you're more patient then I am, you win.\n"; 
      break; 
     } 
    } while (UserNum != InputNum); 



    return 0; 
} 
+0

Je pense que le défi (pour 1 étoile) est de demander à l'utilisateur 10 fois un nombre autre que 5 ..? .. mais ur totalement différente façon –

+0

Oui, je l'ai fait avec succès, le défi 2 étoiles vous dit pour le changer à nouveau pour augmenter le nombre chaque fois que vous demandez, donc j'ai changé le code depuis lors. –

Répondre

1

votre problème est dans un état de boucle do while

instructions sont exécutées d'abord et l'état sont vérifiés après

par exemple

InputNum est initialisé comme 1

donc si vous entrez 2 en tant qu'entrée pour UserNum, dans la condition else if, InputNum sera incrémentée à 2

lorsque cette condition est évaluée

while (UserNum != InputNum) 

il sera faux comme 2==2

casse boucle

solution

changement PATIENCE = 11 et utiliser

while (1) 
// this will run infinitely but it will break after 10 iteration or when u press the same number which u shouldn't 

au lieu de

while (UserNum != InputNum) 

le programme complet

#include <iostream> 


int main() 
{ 
    const int GUESS = 1; // constant for number of tries 
    const int PATIENCE = 11; // constant for message at 10 tries 
    int UserNum; // player input 
    int InputNum = GUESS; // intializes GuessNumber 


          // asks for player input 
    do 
    { 
     std::cout << "Enter any number other then " << InputNum << ": "; 
     std::cin >> UserNum; 

     // exits program if user inputs the number displayed 
     if (UserNum == InputNum) 
     { 
      std::cout << "Hey! you weren't supposed to enter " << InputNum << "!\n"; 
      break; 
     } 
     // increase the Guess counter if they dont enter the number displayed 
     else if (UserNum != InputNum) 
     { 
      InputNum++; 

     } 

     if (InputNum == PATIENCE) 
     { 
      std::cout << "Wow, you're more patient then I am, you win.\n"; 
      break; 
     } 
    } while (1); 


    system("pause"); 
    return 0; 
} 
+0

Merci pour l'aide expliquant pourquoi elle échouait! Je vais essayer de comprendre comment arrêter la boucle de répéter indéfiniment. –

+0

donc il y a encore un problème ?? –

+0

Non désolé, j'utilisais encore la solution avant d'éditer votre réponse. –

0

Hey essayer ce programme, il fait exactement ce que vous voulez.

#include <iostream> 
    int main() 
    { 
     int GUESS = -1;  //loop variable 
     const int PATIENCE = 10; // constant for message at 10 tries 
     int InputNum;   // input from user 



    std::cout << "PATIENCE Test" << "!\n"; 


    do 
    { 
     GUESS++; 
     // asks for player's input 
     std::cout << "Enter any number other than " << GUESS << ": "; 
     std::cin >> InputNum; 

     // exits program if user inputs the number displayed 
     if (GUESS == InputNum) 
    { 
     std:: 
     cout << "Hey! you weren't supposed to enter " << GUESS << "!\n"; 
     break; 
    } 
     if (GUESS == PATIENCE) 
    { 
     std::cout << "Wow, you're more patient then I am, you win.\n"; 
     break; 
    } 

    } 
    while (GUESS != InputNum); 

    return 0; 
} 
+0

Appréciez l'homme d'aide, mais comme je l'ai dit je ne voulais pas que vous le fassiez pour moi, je voulais juste une poussée dans la bonne direction –

+0

ma faute alors .. J'ai raté cette ligne de ne pas dire la réponse dès le départ. –