Zufallsgenerator geht nicht



  • Hi, ich wollte einen Zufallsgenerator für 2-6 Wörter programmieren, ich habe noch nicht so viel Erfahrung und muss auch noch viel lernen, weswegen es sein kann, das mein Code zu lang ist oder ungeordnet, aber das ist erstmal nicht wichtig.

    #include <iostream>
    #include <Windows.h>
    
    using namespace std;
    
    #pragma comment (lib, "winmm.lib")
    
    void ZweiWörter ();
    void DreiWörter ();
    void VierWörter ();
    void FünfWörter ();
    void SechsWörter ();
    
    //Hauptprogramm
    int main ()
    {
    	//Variablen
    	int Auswahl;    //Auswahl wie viele Wörter
    
    	do
    	{
    		//Abfrage, wie viele Wörter
    	    cout << "Wie viele Woerter wollen sie in den Zufallsgenerator eingeben (2-6): ";
        	cin >> Auswahl;
    	    cout << endl;
    
    	    if (Auswahl == 2)
    	    	ZweiWörter ();
    	    else if (Auswahl == 3)
    	    	DreiWörter ();
    	    else if (Auswahl == 4)
    	    	VierWörter ();
    	    else if (Auswahl == 5)
    	    	FünfWörter ();
    	    else if (Auswahl == 6)
    	    	SechsWörter ();
    	    else
    	    	cout << "Falsche Eingabe!\n\n";
    	} while ((Auswahl != 2) && (Auswahl != 3) && (Auswahl != 4) && (Auswahl != 5) && (Auswahl != 6));
    
    	return 0;
    }
    
    void ZweiWörter ()
    {
    	//Variablen
    	char WortEins[20], WortZwei[20];
    	int Zufallszahl = (rand()%2)+1;
    
    	cout << "Geben sie die zwei Woerter ein:" << endl;
    	cin >> WortEins;
    	cin >> WortZwei;
    
    	if (Zufallszahl == 1)
    		cout << "Der Zufall bestimmte: " << WortEins << " als Sieger\n\n";
    	else if (Zufallszahl == 2)
    		cout << "Der Zufall bestimmte: " << WortZwei << " als Sieger\n\n";
    
    	cout << "Danke fuer das Nutzen des Programms!\n\n";
    }
    
    void DreiWörter ()
    {
    	//Variablen
    	char WortEins[20], WortZwei[20], WortDrei[20];
    	int Zufallszahl = (rand()%3)+1;
    
    	cout << "Geben sie die drei Woerter ein:" << endl;
    	cin >> WortEins;
    	cin >> WortZwei;
    	cin >> WortDrei;
    
    	if (Zufallszahl == 1)
    		cout << "Der Zufall bestimmte: " << WortEins << " als Sieger\n\n";
    	else if (Zufallszahl == 2)
    		cout << "Der Zufall bestimmte: " << WortZwei << " als Sieger\n\n";
    	else if (Zufallszahl == 3)
    		cout << "Der Zufall bestimmte: " << WortDrei << " als Sieger\n\n";
    
    	cout << "Danke fuer das Nutzen des Programms!\n\n";
    }
    
    void VierWörter ()
    {
    	//Variablen
    	char WortEins[20], WortZwei[20], WortDrei[20], WortVier[20];
    	int Zufallszahl = (rand()%4)+1;
    
    	cout << "Geben sie die vier Woerter ein:" << endl;
    	cin >> WortEins;
    	cin >> WortZwei;
    	cin >> WortDrei;
    	cin >> WortVier;
    
    	if (Zufallszahl == 1)
    		cout << "Der Zufall bestimmte: " << WortEins << " als Sieger\n\n";
    	else if (Zufallszahl == 2)
    		cout << "Der Zufall bestimmte: " << WortZwei << " als Sieger\n\n";
    	else if (Zufallszahl == 3)
    		cout << "Der Zufall bestimmte: " << WortDrei << " als Sieger\n\n";
    	else if (Zufallszahl == 4)
    		cout << "Der Zufall bestimmte: " << WortVier << " als Sieger\n\n";
    
    	cout << "Danke fuer das Nutzen des Programms!\n\n";
    }
    
    void FünfWörter ()
    {
    	//Variablen
    	char WortEins[20], WortZwei[20], WortDrei[20], WortVier[20], WortFünf[20];
    	int Zufallszahl = (rand()%5)+1;
    
    	cout << "Geben sie die fuenf Woerter ein:" << endl;
    	cin >> WortEins;
    	cin >> WortZwei;
    	cin >> WortDrei;
    	cin >> WortVier;
    	cin >> WortFünf;
    
    	if (Zufallszahl == 1)
    		cout << "Der Zufall bestimmte: " << WortEins << " als Sieger\n\n";
    	else if (Zufallszahl == 2)
    		cout << "Der Zufall bestimmte: " << WortZwei << " als Sieger\n\n";
    	else if (Zufallszahl == 3)
    		cout << "Der Zufall bestimmte: " << WortDrei << " als Sieger\n\n";
    	else if (Zufallszahl == 4)
    		cout << "Der Zufall bestimmte: " << WortVier << " als Sieger\n\n";
    	else if (Zufallszahl == 5)
    		cout << "Der Zufall bestimmte: " << WortFünf << " als Sieger\n\n";
    
    	cout << "Danke fuer das Nutzen des Programms!\n\n";
    }
    
    void SechsWörter ()
    {
    	//Variablen
    	char WortEins[20], WortZwei[20], WortDrei[20], WortVier[20], WortFünf[20], WortSechs[20];
    	int Zufallszahl = (rand()%6)+1;
    
    	cout << "Geben sie die sechs Woerter ein:" << endl;
    	cin >> WortEins;
    	cin >> WortZwei;
    	cin >> WortDrei;
    	cin >> WortVier;
    	cin >> WortFünf;
    	cin >> WortSechs;
    
    	if (Zufallszahl == 1)
    		cout << "Der Zufall bestimmte: " << WortEins << " als Sieger\n\n";
    	else if (Zufallszahl == 2)
    		cout << "Der Zufall bestimmte: " << WortZwei << " als Sieger\n\n";
    	else if (Zufallszahl == 3)
    		cout << "Der Zufall bestimmte: " << WortDrei << " als Sieger\n\n";
    	else if (Zufallszahl == 4)
    		cout << "Der Zufall bestimmte: " << WortVier << " als Sieger\n\n";
    	else if (Zufallszahl == 5)
    		cout << "Der Zufall bestimmte: " << WortFünf << " als Sieger\n\n";
    	else if (Zufallszahl == 6)
    		cout << "Der Zufall bestimmte: " << WortSechs << " als Sieger\n\n";
    
    	cout << "Danke fuer das Nutzen des Programms!\n\n";
    }
    

    Das Problem ist, das immer wieder die gleiche Zahl generiert wird. Ich muss irgendwo einen Fehler bei dem generieren der Zufallszahl gemacht haben.
    LG



  • Du musst (typischerweise einmal am Anfang des Programms) srand ausführen!

    http://msdn.microsoft.com/en-us/library/f0d4wb4t(VS.71).aspx



  • Wieso wird dein Code nicht gehighlightet? Forenbug?



  • Deutsche Umlaute in Klassen-, Variablen- und Funktionsnamen sind nicht erlaubt.



  • DocShoe schrieb:

    Deutsche Umlaute in Klassen-, Variablen- und Funktionsnamen sind nicht erlaubt.

    Microsoft machts möglich. Wir werden uns dran gewöhnen müssen.



  • volkard schrieb:

    DocShoe schrieb:

    Deutsche Umlaute in Klassen-, Variablen- und Funktionsnamen sind nicht erlaubt.

    Microsoft machts möglich. Wir werden uns dran gewöhnen müssen.

    Nein!?



  • Als Parameter für srand kann man die Anzahl der Sekunden seit dem 1.1.1970 verwenden. (Liefert die Funktion time)

    Der Aufruf von srand könnte also so aussehen:

    srand((unsigned)time(NULL));
    

    Das müsstest du an den Anfang der main-Funktion schreiben.
    Der Aufruf muss natürlich vor dem Aufruf einer der Funktionen xxxxWörter erfolgen. Du musst auch noch die Headerdatei <ctime> einbinden, wegen der Deklaration von der time-Funktion

    MfG, Jochen



  • Danke für eure Hilfe, ich hatte das srand total vergessen und wäre von selbst glaub ich nie drauf gekommen^^. Danke!


Anmelden zum Antworten