In der Eingabe nur Integer

Abrasavanie

Grünschnabel
C++:
#include <iostream>

#include <cstdlib>

#include <ctime>

#include <limits>

using namespace std;

{

string input;

cin >> input;

int number;

if(getInt(&number, input))

{

}

int main()

{

    int num, guess, tries = 0;

    srand(static_cast<unsigned int>(time(0)));

    num = rand() % 10 + 1;

    do

    {

        cout << "Rate : ";

        cin.width(1);

        cin >> guess;

        if (cin.fail()) {

            cin.clear();

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

            cout<<"Nur Zahlen zwischen 1 und 10!\n\n";

        }

        else if (guess>10){

            cin.clear();

            cout<<""<<guess<<" ist größer als 10!\n\n";

        }

        else if (guess<1) {

            cin.clear();

            cout<<""<<guess<<" ist kleiner als 1!\n\n";

        }

        else {

            tries++;

            if (guess > num)

                cout << "Zu groß!\n\n";

            else if (guess < num)

                cout << "Zu klein!\n\n";

            else

                cout << "\nRichtig! Du hast es in  " << tries << " Versuchen geschafft!\n";

        }

    } while((guess != num)&&(tries<3));

    return 0;

}

    }
 

cwriter

Erfahrenes Mitglied
Aber...
Aber...
:confused:

Du musst schon die gesamte Funktion kopieren und nicht nur einen Ausschnitt davon. Und dann solltest du die gesamte Funktion vor der main() haben, und nicht die main() so halb in diese Funktion schieben...

Also: Den ersten Codeabschnitt von mir oben markieren (alles auswählen), kopieren. Cursor vor "int main()" setzen, einfügen.
Dann den 2. Codeabschnitt entweder als Beispiel betrachten oder wieder alles auswählen, kopieren, und innerhalb der main, nämlich anstelle des cin >> guess einfügen. Du kannst danach entweder &number zu &guess ändern oder einfach guess = number setzen.

Gruss

(bzw.: Du hast den falschen Codeausschnitt oben eingefügt...)
cwriter
 

Abrasavanie

Grünschnabel
Ich hoffe, es ist so richtig. Das Problem ist, das Programm kontrolliert wieder nur die erste Stelle. 3.5 und 3,5 nimmt er zu erst an, schreibt "zu klein","zu groß" oder "richtig" und dann erst erkennt er, dass die Zahl falsch ist und gibt mit die Fehlermeldung aus.

C++:
#include <iostream>

#include <cstdlib>

#include <ctime>

#include <limits>

using namespace std;

bool getInt(int* out, const std::string& str)

{

    if(out == nullptr) return false;

    *out = 0;

    for(size_t i = 0; i < str.size(); i++)

    {

        if(!isdigit(str[i])) return false;

        *out *= 10;

        *out += str[i] - '0';

    }

    return true;

}int main()

{

    int num, guess, tries = 0;

    srand(static_cast<unsigned int>(time(0)));

    num = rand() % 10 + 1;

    do

    {

        cout << "Rate : ";

        cin.width(1);

        string input;

        cin >> input;

        int guess;

        if(getInt(&guess, input))

        {

            tries++;

            if (guess > num)

                cout << "Zu groß!\n\n";

            else if (guess < num)

                cout << "Zu klein!\n\n";

            else

                cout << "\nRichtig! Du hast es in  " << tries << " Versuchen geschafft!\n";

        }

        else {

            cout<<"Dies ist keine Zahl zwischen 1 und 10";

            cin.clear();

        }

    } while((guess != num)&&(tries<3));

    return 0;

}