2013-03-15 148 views
1

我正在學習C++,但我遇到了一個我無法弄清楚的問題。當我鍵入X數量的字符時,當前字符數將導致顯示「失敗」消息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

砍掉所有不相關的代碼,直到你得到了問題的實質。 – 2013-03-15 12:04:05

回答

1
cin.ignore(); 

您只忽略一個字符。您需要忽略整行:

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

(您需要包括limitsstd::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; 
}