1

C++ を学習していますが、理解できない問題があります。X 個の文字を入力すると、現在の文字数では「失敗しました」というメッセージが X 回表示されます。

スクリーンショット、

ここに画像の説明を入力

ここに私のコードがあります、

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

学びながらやっている簡単なプログラムです。

4

2 に答える 2

1
cin.ignore();

1文字だけ無視します。代わりに、行全体を無視する必要があります。

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

limits( forを含める必要がありますstd::numeric_limits)。std::basic_istream::ignoreあなたの問題に正確に取り組むも参照してください。

于 2013-03-15T11:15:07.840 に答える
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;
}
于 2013-03-15T13:10:38.393 に答える