Fehler in einer DO-WHILE-Schleife



  • Hallo,
    ich habe ein Programm geschrieben, dass fast rund läuft, aber nuzr fast 🙂
    Das Programm soll den Nutzer nach einer Obergrenze und einer Untergrenze Fragen im Raum von 0-32767. Machts auch. Dann will ich prüfen ob die Obergrenze auch wirklich größer als die Untergrenze ist. Machts auch:) Wenn Obergrenze>Untergrenze ist leite ich eine do-while schleife ein. Hier soll so lange eine Zufallszahl generiert werden bis sie in dem oben angegebenem Intervall liegt. Das klappt bei mir leider nicht ganz so 😞
    Meine Zufallszahl ist immer 41. Wenn ich dann als Untergrenze 50 wähle, wird trotzdem 41 ausgegeben. Da ist doch ganz klar ein Haken in der do-while Schleife, aber wo ?

    #include<iostream>
    #include<string>
    #include<math.h>
    #include<cstdlib> //enthält die Funktionen fuer Zufallszahlen
    #include<stdlib.h> //alternativ:enthält ebenfalls die Funktionen für Zufallszahlen
    void zufallszahl(int &z);
    using namespace std;
    int main(void)
    {
    	int obergrenze, untergrenze,i;
    	cout << "Bitte geben Sie die obere Grenze ein (max 32767)" << endl;
    	cin >> obergrenze;
    	cout << "Bitte geben Sie die untere Grenze ein (min 0)" << endl;
    	cin >> untergrenze;
    	if(obergrenze<untergrenze)
    		{
    		cout << "FALSCH!!" << endl;
    		}
    	else
    	{
    	do
    	{
    		zufallszahl(i);
    	}
    	while(i<obergrenze && i>untergrenze);
    	{
    		cout << i;
    	}
    	}
    	//system("Pause");
    	return 0;
    }
    
    void zufallszahl(int &z)
    {
    	z=rand();
    	//cout << z << endl;
    }
    


  • Du gibst ja nur die Zahl aus, die zum Abbruch der Schleife geführt hat.

    Du solltest den Zufallsgenerator mit einem Startwert vorbesetzen, da er sonst immer dieselbe Zahlenfolge ausspuckt.

    Man nimmt dazu i.A die aktuelle Zeit, die man mit der Funktion time bekommt.

    http://www.cplusplus.com/reference/cstdlib/rand/

    Noch etwas:
    Deine Einrückung ist grottig 👎
    Die Klammern {} vor und nach cout << i; sind überflüssig.
    zufallszahl sollte eine richtige Funktion mit RÜückgabewert sein.
    Die Referenz ist nicht nötig.



  • Eine do-while Schleife läuft, solange die Bedingung erfüllt ist. Wann wird deine Schleife dann also beendet?


Anmelden zum Antworten