Tandis que les boucles avec minuterie en c++

Je suis en train de créer une boucle while que lorsque la chaîne de condition ou de la minuterie condition est remplie, le programme va sortir de la boucle et imprimer le résultat souhaité. Et lors de l'impression de la sortie souhaitée, la sortie contient la différence de temps avant et après la comparaison de la réponse.

Mais la boucle ne s'exécute pas la façon dont je l'attend. Si quelqu'un peut m'aider à comprendre où est le problème avec ce morceau de code?

Ci-dessous mon code:

void startGame(time_t cd,int gl){
    string guessWord;
    time_t start, end, diff,timeLeft;

    cout << "Scrambled word is " << randomizeWord(gl) << endl;

    while (timeLeft != cd || guessWord.compare(originalWord) == 0)
    {
        start = time(0);
        cout << "You have " << cd << " seconds to guess." << endl;
        cout << "Enter guess : ";
        cin >> guessWord;
        end = time(0);
        diff = end - start;
        //total_time = total_time + diff;
        timeLeft = cd - diff;

        if(guessWord.compare(originalWord) != 0)
        {
            cout << "WRONG! Attempt ... You have " << timeLeft << "seconds left... Try Again" << endl;
            cout << "Enter guess : ";
            cin >> guessWord;             
        }
        else
        {
            cout << "You are CORRECT! "<< timeLeft <<" seconds left. Your timing is "<< diff <<" seconds." << endl;            
            break;
        }
    }
}
  • Changement: timeLeft >= cd
  • Ne pas le faire guessWord.compare(...) deux fois, l'une dans le corps de la boucle et un dans la condition de la boucle. L'utilisation d'un "réussi" à la variable. Si l'un dans le corps de la boucle réussit, définissez cette variable à true. Dans la condition de la boucle, utilisez !succeeded. Le temps de la condition de la boucle doit être écrit plus clairement, trop - je ne comprenais pas, après l'avoir regardé pendant cinq secondes, et c'est un signe rouge les conditions de boucle. Aussi, cd est un mauvais choix pour un nom de paramètre.
  • Merci je l'ai fait. Mais mon problème persiste toujours. - Je entrer une mauvaise réponse la 1ère fois et que le programme est censé continuer à m'invite pour la réponse. Puis-je entrer une réponse incorrecte 2ème temps, il justs casse la boucle.
  • Vous avez besoin de déboguer votre code. Si il n'est pas clair pour vous ce qui se passe, utilisez les messages de trace pour vous aider.
  • par corps de boucle en u qui fait référence à la "tandis que" la boucle et de la condition de boucle u se référant à la "if-else" déclaration?
  • Pour commencer, vous pouvez initialiser timeLeft avant la while. Comme l'écrit, vous avez un comportement indéfini.
  • Le corps de la boucle sont toutes les lignes contenues entre while (timeLeft != cd || guessWord.compare(originalWord) == 0) et la } qui ferme le tout.
  • Oh, et comme @James dit que vous devriez toujours, toujours, toujours initialiser vos variables. Vous ne devez jamais travailler avec une variable non initialisée.

InformationsquelleAutor Joel Seah | 2013-07-15