Programm bleibt stecken



  • Ich starte das programm dan steht ein text und dann geht es nichtmehr weiter.
    Ich habe 2 vermutungen 1. Die obere while schleife braucht so lange oder es gibt keine randome zahl unter 100.

    #include <iostream>
    #include <ctime>
    #include <random>
    
    void generator() {
    
    	srand(time(0)); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand(); rand();
    
    }
    
    void main() {
    	std::cout << "Willkommen zu meinem Ratespiel." << std::endl;
    
    	generator();
    	int eingabe = 0;
    	int randome = rand();
    
    	while(randome > 100){
    
    		int randome = rand();
    
    	}
    
    	while (randome != eingabe) {
    
    		std::cout << randome << std::endl;
    
    		std::cout << "Gebe die gesuchte Zahl ein: " << std::endl;
    
    		std::cin >> eingabe;
    		if (eingabe == randome){
    
    			std::cout << "Die zahl wurde richtig eigegeben!" << std::endl;
    		}
    		else {
    
    			std::cout << "Die zahl war falsch!" << "(" << eingabe << ") \n \n" << std::endl;
    			if (eingabe < randome) {
    
    				std::cout << "Die Zahl ist groesser" << std::endl;
    			}
    
    			else {
    
    				std::cout << "Die Zahl ist kleiner" << std::endl;
    			}
    		}
    
    	}
    
    	system("pause");
    	return ;
    
    }
    


  • Ih habe einfach das mit dem ngenerator entfernt da wenn es mit der zeit geht es ja zu lange.

    Ich finde immer den Fehler wenn ich ihn poste 😡

    Aber das nächste was jetzt ist da der computer ja keine Zufallszahlen machen kann kommt immer 41 raus 😕



  • int randome = rand();
    
    while(randome > 100){
    
            int randome = rand();
    
        }
    

    Du erzeugst einen Wert, gehst dann in eine Schleife, in der du die erste Variabel verdeckst ( int randome ist eine Neudefinition der Variablen), und bei Prüfungen prüfst du dann immer nur den Wert, der sich nicht ändert. Der sich nie ändert.

    Außerdem werden die meisten Zufallszahlen über 100 sein. Der Generator geht bis RAND_MAX . Sprich, deine Schleife ist schon so unwahrscheinlich genug, jemals zu enden.



  • Ja ich weis das ist glaube ich immer 41 bei mir aber wei mache ich das es sich immer verändert?



  • Du führst einmal im ganzen Programm

    srand(time(0));
    

    aus.

    Und dann arbeitest du mit der vorher definierten Variablen (und keiner neuen)

    int randome = rand();
    
        while(randome > 100) {
    
        /* int */ randome = rand();
    
        }
    

    Oder du nimmst einen anderen Zahlengenerator, der mehr Einstellmöglichkeiten hat.



  • Danke für die Hilfe wird sofort ausprobiert! 👍



  • Du kannst auch den moderneren Weg gehen: include <random> und dann:

    std::random_device rd;
    std::uniform_int_distribution<int> dist(10, 40);
    std::cout << "Zufallszahl ist " << dist(rd) << "\n";
    

    Oder, wenn du viele Zufallszahlen erzeugen musst (oder reproduzierbaren Zufall brauchst), dann erzeuge erst einen Pseudozufallszahlengenerator:

    std::mt19937 mt(random_device{}());
    std::uniform_int_distribution<int> dist(10, 40);
    std::cout << "Zufallszahl ist " << dist(mt) << "\n";
    

    Die Zahlen 10, 40 stehen wir für den Bereich, aus dem die Zahlen kommen sollen (beide inklusive). Und mit der uniform_int_distribution brauchst du dir dann keine Gedanken mehr zu machen, dass die Zufallszahlen im gewünschten Bereich liegen und gleichverteilt darin sind.



  • Danke werde ich als nächstest versuchen



  • Waschlappen4 schrieb:

    ...
    Aber das nächste was jetzt ist da der computer ja keine Zufallszahlen machen kann kommt immer 41 raus 😕

    Ohje, dein Computer hat eine schwere Fehlfunktion. Es müsste nämlich immer 42 rauskommen!



  • Mit

    rand() % x
    

    bekommt man aber logischerweise nur eine Zufallszahl zwischen 0 und x. Also gehts auch so

    #include <cstdlib>
    #include <ctime>
    
    int myRand(const int& lowerBound, const int& upperBound)
    {
    	return (std::rand() % (upperBound - lowerBound)) + lowerBound;
    }
    
    int main()
    {
    	std::srand(std::time(0));
    	int number = myRand(400, 501); //zahl zwischen 400 und 501
    }
    

Anmelden zum Antworten