Fehlermeldungen programmieren und Zufalsgenerator. Hilfe!



  • Guten Abend
    ich habe die folgenden 2 Probleme
    1. ich habe eine Funktion programmiert welche prüft ob die Eingabe der benutzer den Anforderungen des Programms entschpricht (in diesem Falle möchte das Programm das nur Zahlen zwischen 0 und 999999 vom typ int zugelassen werden)

    void intproof(int *input)
    {
    	const int Max=999999;
    	const int Min=0;
    	bool Correct=false;
    	while(Correct!=true)
    	{
    		cin >> *input;
    		if(*input<=Max && *input>Min)
    		{
    			Correct=true;
    		}
    		else
    		{
    			cout << "you were only allowed to enter a Number between " << Min << " and " << Max << endl;
    			cout << "Try it again" << endl;
    			cout << endl;
    			Correct=false;
    		}
    	}
    }
    

    das Problem hier ist das wen der Benutzer ein Buchstabe eingibt, das Programm sich aufhängt. ich weis nicht wie ich dem klar machen soll das auch keine Buchstaben zugelassen sind.(wen Fragen zu der Funktion sind warum ich etwas so gemacht habe wie ich es gemacht habe, dan bitte fragen)

    2. Problem
    ich besetze eine Zahl mit dem Zufalsgenerator srand(), das Problem hier ist das die Zufalszahl immer die selbe ist, ich möchte das jedes mal wenn das Programm startet eine neue, andere Zahl in die Variable gesetzt wird. wie kriege ich das hin?

    Vielen dank schon mal für die Antworten.
    Einen schönen abend noch an alle.



  • Initialisiert srand nicht nur den Zufallsgenerator?

    Die Zufallszahl selber bestimmst du mit rand(), glaub ich.

    Rufst du srand(time(NULL)) so auf, ansonsten kanns schon sein, dass du immer den selben Wert bekommst.

    €dit: ich war mir nicht so sicher^^



  • TheJoker schrieb:

    2. Problem
    ich besetze eine Zahl mit dem Zufalsgenerator srand(), das Problem hier ist das die Zufalszahl immer die selbe ist, ich möchte das jedes mal wenn das Programm startet eine neue, andere Zahl in die Variable gesetzt wird. wie kriege ich das hin?

    Mit

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

    Und aufpassen, daß diese Zeile nur einmal aufgerufen wird, am besten anm Anfang der main().



  • Hallo,

    Zum ersten Problem:
    Du könntest die Zahl als string einlesen und dann mittels atoi in eine zahl umwandeln:

    string eingabe;
    int zahl;
    cin >> eingabe;
    zahl = atoi(eingabe.c_str());
    

    Dann sind Buchstaben in der Eingabe egal.

    MfG,Jochen



  • vielen dank an alle für die schnellen antworten.
    @volkart dankeschön, zweites Problem gelöst.
    @Jochen S. Okay, aber der Wert der durch die funktion auf Fehler geprüft wird muss später noch verwendet werden, von daher soll es eine fehlermeldung geben, welche ausgegeben wird wen der Parameter der Funktion größer als 999999 oder wen er kleiner als 0 ist, genau so wie wen er Buchstaben enthält. Die Funktion soll dem Benutzer nach der Fehlermeldung die Möklichkeit geben die Eingabe zu wiederholen und das bis der Parameter einen Wert zwischen 0 und 999999 enthält. Mein Problem ist es, dass ich nicht weis wie ich es deutlich machen soll das Buchstaben nicht als eingabe erlaubt sind.



  • TheJoker schrieb:

    ... von daher soll es eine fehlermeldung geben, welche ausgegeben wird wen der Parameter der Funktion größer als 999999 oder wen er kleiner als 0 ist, genau so wie wen er Buchstaben enthält ...

    Du kannst das doch vorher prüfen.
    Schnell zusammengehackt und verbesserungswürdig:

    string eingabe;
    int zahl;
    bool eingabefalsch = true;
    while (eingabefalsch){
        cin >> eingabe;
        eingabefalsch = false;
        for (char *c = eingabe.c_str(); *c; c++)
            if (*c < '0' || *c > '9'){
                eingabefalsch = true;
                break;
            }
        if (!eingabefalsch){
            zahl = atoi(eingabe.c_str());
            if (zahl < 0 || zahl > 999999){
                eingabefalsch = true;
                cout << "eingegebene Zeichen außerhalb des Wertebereichs, nochmal";
            }
        }
        else
            cout << "falsche Zeichen in der Eingabe, nochmal probieren";
    }
    //tu was mit zahl
    


  • @nwp2 Dankeschön, mein Problem ist gelöst.
    Vielen dank an alle.


Log in to reply