0
votes

Des sorties infinies d'une boucle if-else / tandis que la boucle?

Je suis un programmeur débutant en C ++ essayant de créer cette pratique Guess-the-Number Jeu à remplir certaines exigences. Ce sont:

  1. Utilisez 'Flush' (Je ne sais pas ce que c'est, aide?)
  2. Quittez le jeu une fois que le numéro a été deviné
  3. Quittez le jeu une fois qu'un maximum de 10 suppositions ont été dépassés

    Mais le problème actuellement est que lorsque je saisi un numéro, il me dit si le numéro entré est supérieur ou inférieur au numéro correct généré aléatoirement. Donc, si c'est plus bas, la sortie est «plus faible enlaulowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerlowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLowerLower Je ne sais pas ce que j'ai mal fait?

    Voici mon code. (X = nombre généré aléatoirement, y = devinez, z = # de suppositions) xxx


1 commentaires

Quelles sont vos attentes du code?


5 Réponses :


0
votes

1- La variable Z n'est pas initialisée

2-vous êtes censé lire l'entrée à chaque fois que vous êtes en boucle, je suppose (à lire la supposition)? Comme ceci xxx

Remarque: vous devez initialiser la graine aléatoire avant d'utiliser votre fonction aléatoire: xxx


0 commentaires

0
votes
  1. Prenez simplement une entrée à l'intérieur de la boucle.
  2. Un autre problème initialise z avec zéro. Il est initialisé par défaut et peut avoir une valeur.
  3. Suggestion Initialiser les graines aléatoires: xxx

0 commentaires

0
votes

Mettez votre std :: Cin dans la boucle. Vous devez également définir z au début et l'ajouter par 1 chaque fois que la boucle fonctionne.

int main() {
  srand (time(NULL));
  int x , y, z;
  x = rand() % 1000 + 1;
  z = 0;

  do{
 std::cin>>y;
    if (y > x){
      std::cout<<"higher"<< std::endl;

    } else if (y < x) {
      std::cout<<"lower"<< std::endl;

    } else if (y == x) {
      std::cout<<"correct"<< std::endl;
    }
  } while (y != x && z++ < 9);
  return 0;
}


0 commentaires

0
votes

Vous avez un comportement non défini: xxx

z est utilisé avant l'initialisation.


0 commentaires

0
votes

Vous faites mal quelques choses:

  • Comme vous devez utiliser l'opération de flush explicitement, vous devez utiliser std :: COUT Quelque part. Li>
  • Vous devez obtenir une entrée de l'utilisateur à l'intérieur du corps de la boucle. Li>
  • Vous devez d'abord initialiser le générateur de nombres aléatoires avant de l'utiliser. Li>
  • Vous devez initialiser la variable z code> à 0, car vous avez un comportement non défini - vous incrémentez la variable qui a une valeur indéfinie (non initialisée précédemment). LI> ul>

    Voici votre code avec ces correctifs: P>

    #include <iostream>
    #include <ctime>
    
    int main() {
        int x, y, z = 0;
        srand(time(NULL));
        x = rand() % 1000 + 1;
    
        std::cout << x << std::endl;
    
        do {
            std::cin >> y;
            if(y > x) {
                std::cout << "higher" << std::endl;
                z++;
            } else if(y < x) {
                std::cout << "lower" << std::endl;
                z++;
            } else {
                std::cout << "correct" << std::endl;
            }
            std::cout << std::flush;
        } while(y != x && z <= 10);
        return 0;
    }
    


0 commentaires