In der Eingabe nur Integer

Abrasavanie

Grünschnabel
Hallo,
Ich habe einen Zufallsgenerator gebaut, der zwar Buchstaben und Zahlen außerhalb von eins und zehn ignoriert, Kommazahlen jedoch akzeptiert. 3,4 und 4.6 nimmt er beispielsweise. Wie kann ich "." und "," ausschließen? Ich bräuchte irgendetwas, dass nicht nur das erste Zeichen des Integers.
Danke für eure Hilfe,
LG
C++:
#include <iostream>

#include <cstdlib>

#include <ctime>

#include <limits>


using namespace std;



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
Kommazahlen jedoch akzeptiert. 3,4 und 4.6 nimmt er beispielsweise. Wie kann ich "." und "," ausschließen? Ich bräuchte irgendetwas, dass nicht nur das erste Zeichen des Integers.
Hä?

Willst du keine Kommazahlen als Eingabe haben?
Das ist fast unmöglich zu erreichen.
Eine einfache Lösung wäre, guess zu einem double zu machen und dann guess == floor(guess) zu vergleichen. Ist es gleich, kannst du auf int casten, wenn nicht, war die Eingabe ungültig.
Ansonsten müsstest du regex zuerst überprüfen, ob die Eingabe korrekt ist.

Gruss
cwriter
 

Abrasavanie

Grünschnabel
Danke cwriter,
Zahlen, die "." enthalten nimmt er nun nicht mehr. Das Komma stellt trotzdem noch ein Problem da. Tut mir leid, wenn ich mich unverständlich ausgedrückt habe. Ich wollte sagen: Das Programm soll mir alles zurückwerfen, was nicht 1,2,3,4,5,6,7,8,9 oder 10 ist. Also auch alle Kommazahlen, Buchstaben etc.
Kommazahlen sollen nicht gerundet und verwendet werden, sondern rausgefiltert.
 

cwriter

Erfahrenes Mitglied
C:
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;
}
Aufruf:
C++:
std::string input;
std::cin >> input;
int number;
if(getInt(&number, input))
{
//Eingabe gültig
}

Gruss
cwriter
 
Zuletzt bearbeitet:

Abrasavanie

Grünschnabel
Tut mir leid, ich bin noch sehr neu und ich hab nicht gefunden in welcher Bibliothek "getInt" zu finden ist. Meinst du mit "&n" number?
lg
 

Abrasavanie

Grünschnabel
Sie meinen, ich soll sie vor die int main() setzen und dann in der main darauf zurückgreifen?
Es funktioniert nicht recht, sie davor zu platzieren
 

Abrasavanie

Grünschnabel
Wenn ich sie in Klammern schreibe, dann schreibt er neben meine oberste Klammer "Expected unqualified -id" und ohne Klammern schreibt er den selben Ausdruck neben std::cin>>input; und neben if(getInt(&number, input)).