C ++消息多次打印

时间:2013-03-15 11:06:40

标签: c++ console

我正在学习C ++,但我有一个我无法弄清楚的问题。当我输入X字符数时,当前字符数将导致“失败”消息显示X次。

截图,

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;
}

我在学习的过程中只是一个简单的程序。

2 个答案:

答案 0 :(得分:1)

cin.ignore();

你只会忽略一个角色。你需要忽略整行:

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

(您需要为std::numeric_limits添加limits)。另请参阅std::basic_istream::ignore,它正好解决了您的问题。

答案 1 :(得分: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;
}