2013-03-15 2 views
1

Я изучаю C++, но у меня есть проблема, которую я не могу понять. Когда я набираю X количество символов, текущее количество символов приведет к тому, что сообщение «failed» будет отображаться X раз.Сообщение C++ печатается несколько раз

Скриншот,

enter image description here

и вот мой код,

#include <iostream> 
#include <stdlib.h> 
#include <string> 
#include <time.h> 
#include <ctype.h> 

using namespace std; 

int generateNumber() 
{ 

    int randomNumber; 

    srand(time(0)); 
    randomNumber = rand() % 100 + 1; 

    return randomNumber; 

} 

int main() 
{ 

    // Predefine vars 
    int lifes = 5; 
    int attempts = 0; 
    int randomNumber = generateNumber(); 
    int gameStarted = 0; 
    int gussedNumber; 
    int score = 0; 
    string username; 

    cout << "--------------------------------" << endl; 
    cout << "------- GUESS THE NUMBER -------" << endl; 
    cout << "---------- VERSION 1.0 ---------" << endl; 
    cout << "--------------------------------" << endl << endl; 

    while(gameStarted == 0) 
    { 
     cout << "Enter your username before we get started" << endl; 
     cin >> username; 
     gameStarted = 1; 
     system("cls"); 
    } 

    if(gameStarted == 1) 
    { 

     cout << "Welcome, " << username << "!" << endl; 
     cout << "Guess a number between 1 - 100" << endl << endl; 

     while(attempts <= lifes) 
     { 

      // If you dont have any more lifes left 
      if(lifes == 0) 
      { 

       system("CLS"); 
       cout << "Game Over" << endl; 
       cout << "Lets try again." << endl; 
       cout << "Guess a number between 1 - 100" << endl << endl; 
       lifes = 5; 
       randomNumber = generateNumber(); 

      } else { 

       cin >> gussedNumber; 

       if(cin) 
       { 

        if(gussedNumber == randomNumber) 
        { 

         // Correct Number 
         system("CLS"); 
         cout << "ConGratz Bro, you hit the correct number!" << endl; 
         cout << "Lets try again. You now have 5 lifes left." << endl; 
         lifes = 5; 
         score = score + 1; 

         // Generate a new random number 
         randomNumber = generateNumber(); 

        } else { 

         // Wrong Number 
         lifes = lifes - 1; 
         cout << "Wrong Number." << endl; 
         cout << "Number of lifes left: " << lifes << endl << endl; 

        } 
       } else { 
        cin.clear(); 
        cin.ignore(); 
        cout << "That was not a number!" << endl; 
       } 
      } 
     } 
    } 

    cout << randomNumber << endl; 
    return 0; 
} 

Просто простая программа, я делаю во время обучения.

+0

Нарезать весь несущественный код, пока вы не получите суть проблемы. –

ответ

1
cin.ignore(); 

Вы игнорируете только один символ. Вы должны игнорировать всю строку вместо того, чтобы:

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

(Вы должны включить limits для std::numeric_limits). См. Также std::basic_istream::ignore, который точно решает вашу проблему.

0

Я выхваченное все ненужного кода и получил это:

#include <iostream> 

int main() 
{ 
    for(int attempts=0; attempts < 10; ++attempts) { 
     int guessedNumber; 
     cin >> guessedNumber; 
     if(cin) { 
     } else { 
      cin.clear(); 
      cin.ignore(); 
      cout << "That was not a number!" << endl; 
     } 
    } 
    return 0; 
} 
Смежные вопросы