J'ai une simple situation de boucle while imbriquée mais je ne sais pas comment incrémenter numGuesses dans la deuxième boucle pour échapper à la première boucle une fois qu'elle n'est pas inférieure à 5.

while(numGuesses<5){
    while(!correct){
        cout << "\nGuess the number the computer randomply picked between 1 - 100: ";
        numGuesses++;
        cin >> guess;
        if(guess<number){
            cin.clear(); //clears input stream
            cin.ignore(256, '\n');
            cout << "\nSorry, your guess is too low";
        }
        else if (guess>number){
            cout << "\nSorry, your guess is too high";
        }
        else{
            cout << "\nYou guessed right, you win!";
            correct = !correct;
        }
    }
    
}
cout << "Sorry, you lost. The number is: " << number;

Chaque fois que la boucle while interne se répète, j'aimerais que numGuesses augmente, mais je suppose que ce n'est pas dans sa portée? Désolé pour la question noob. Code complet: https://ctxt.io/2/AAAgfdIGEg

0
Jordan Molina 23 oct. 2020 à 22:03

2 réponses

Meilleure réponse

Vous devriez juste utiliser une boucle while! Après tout, la chose sur laquelle vous faites une boucle incite à deviner. Il n'y a pas besoin d'une deuxième couche de boucle à l'intérieur. Pensez au moment où vous voulez arrêter de demander une estimation - quand les estimations atteignent 5 ou quand elles sont correctes. Alors, quand voulez-vous continuer à demander une estimation? Lorsque les estimations sont inférieures à 5 et qu'elles ne sont pas correctes. De plus, vous voulez dire s'ils ont perdu après la fin de la boucle en fonction de la valeur de correct.

while(numGuesses<5 && !correct) {
    cout << "\nGuess the number the computer randomply picked between 1 - 100: ";
    numGuesses++;
    cin >> guess;
    if(guess<number){
        cin.clear(); //clears input stream
        cin.ignore(256, '\n');
        cout << "\nSorry, your guess is too low";
    }
    else if (guess>number){
        cout << "\nSorry, your guess is too high";
    }
    else{
        cout << "\nYou guessed right, you win!";
        correct = !correct;
    }
}
if (!correct) { // loop stopped before they got it correct
    cout << "Sorry, you lost. The number is: " << number;
}

Vous aurez également besoin de "\n" ou de std::endl à la fin de vos instructions d'impression, sinon votre code imprimera tout sur une seule ligne.

2
Anonymous1847 23 oct. 2020 à 19:08

Vous n'avez pas besoin de 2 temps ...

while(numGuesses < 5 && !correct)
{
       // your logic here
}

Après cela, vous pouvez vérifier la variable correct ou numGuesses . Par exemple:

if(!correct)
    // your code
1
vmp 23 oct. 2020 à 19:07