Zufallszahlen erzeugen und vergleichen mit Eingabe (Masterminde)



  • Hallo Leute,

    ich probire ein kleines Konsolenprogramm zu Programmieren (Ähnlichkeiten mit dem Spiel Mastermind sind absolut zufällig!).

    Folgenes Problem:

    for(a = 0; a < spalten; a++)
    	{
    	ziel[a] = zufallszahlen(max);	
    	}
    

    Hier wird der Zufallsgenerator aufgerufen

    Zufallsgenerator:

    int zufallszahlen(int max)
    {
    	int r;
    	srand((unsigned)time(NULL));
    
    	 r = rand () % max + 1;
    	return r;
    }
    

    Der Benutzer gibt nun auch eine Zahlenfolge ein, und die beiden werden verglichen:

    scanf("%d", &trye);
    
    		for(c = 0; c < spalten; c++)
    		{
    		if(ziel[c] == trye[c])
    			rp++;
    		}
    

    Und dann noch die Ausgabe:

    printf("\n\n %d  %d %d \n %d", trye, rp, rf, ziel);
    

    (Im fertigem Programm wird ziel natürlich nicht ausgegeben)

    Das Problem:

    - Zufallszahl wird größer als gewollt und länger
    - Zufallszahl und Benutzereingabe sind gleich 😕
    - Der vergleich von trye und ziel klappt nicht bzw. rp ändert sich nicht

    Ich hoffe auf Hilfe!

    PS: Die Variabeln:

    int spiel(int spalten, int max, int versuche)
    {
    int a, b, c, d, e;
    int ziel[10];
    int trye[10];
    int rf, rp;
    


  • Dein Code sieht eher nach C als nach C++ aus.
    Srand sollte nur einmal aufgerufen werden.

    feps schrieb:

    Das Problem:

    - Zufallszahl wird größer als gewollt und länger

    Und das heisst konkret?

    - Zufallszahl und Benutzereingabe sind gleich 😕
    - Der vergleich von trye und ziel klappt nicht bzw. rp ändert sich nicht

    Ich bezweifle, dass scanf mit der Adresse eines Arrays aufgerufen werden darf, aber ich programmiere schon lange nicht mehr C.



  • Printf ist mit den Arrays auch falsch



  • manni66 schrieb:

    Ich bezweifle, dass scanf mit der Adresse eines Arrays aufgerufen werden darf, aber ich programmiere schon lange nicht mehr C.

    Das ist ausnahmsweise korrekt, da die Adresse des Arrays gerade auch die Adresse des ersten Elements ist (genauso wie in C++). Sieht aber trotzdem stark nach einem Verständisfehler aus.

    Bei printf ist es aber eindeutig falsch und gibt die Adresse des Arrays aus, was zu der Vermutung führt, dass die Zufallszahl größer als gewollt und länger ist.



  • Also ja, stimmt ist C. Da habe ich mich im Forum vertan sorry.
    Ansonsten also den Zufallsgenerator nur einmal initialisieren, ok mache ich.

    Was dass mit der Zufallszahl angeht, so bin ich der Meinung mich zu erinnern, dass diese nicht größer als "max" werden sollt, wird sie aber.



  • feps schrieb:

    Was dass mit der Zufallszahl angeht, so bin ich der Meinung mich zu erinnern, dass diese nicht größer als "max" werden sollt, wird sie aber.

    Das Problem ist, dass du die falschen Werte ausgibst.
    Die Ausgabe sollte so aussehen:

    printf("\n\n %d  %d %d \n %d", trye[0], rp, rf, ziel[0]);
    

    (oder rf/rp anstatt 0)



  • cxx schrieb:

    ..., da die Adresse des Arrays gerade auch die Adresse des ersten Elements ist (genauso wie in C++).

    Aber der Adressoperator ist bei einem Array² selten sinnvoll, da ja schon der Name alleine für die Adresse steht.

    ²gemeint ist das ganze Array, nicht ein Element davon.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nachdem jetzt erläutert wurde, was alles falsch ist, bleibt eine Frage.
    Wie kann ich das Problem (möglichst einfach zu verstehen) lösen?



  • feps schrieb:

    Wie kann ich das Problem (möglichst einfach zu verstehen) lösen?

    Indem man ein minimal compilierbares Beispiel liefert?
    Indem man dort die schon gegebenen Fehlerhinweise berücksichtigt?
    Indem man die Forumsregeln liest und befolgt?
    Indem man die C Codetags benutzt?



  • cxx schrieb:

    manni66 schrieb:

    Ich bezweifle, dass scanf mit der Adresse eines Arrays aufgerufen werden darf, aber ich programmiere schon lange nicht mehr C.

    Das ist ausnahmsweise korrekt, da die Adresse des Arrays gerade auch die Adresse des ersten Elements ist (genauso wie in C++).

    Ja und?
    Was soll das aussagen?
    Nur dass du verständnislos das nachplapperst, was du irgendwo aufgeschnappt hast.

    int trye[10];
    scanf("%d", &trye);
    

    Und das ist UB. Deine Schlussfolgerung, es sei alles OK weil die Zeigerwerte gleich sind bezeugt nur, dass du keine Ahnung von Zeigern hast (und von Arrays auch nicht).



  • feps schrieb:

    Wie kann ich das Problem (möglichst einfach zu verstehen) lösen?

    Wie wärs, wenn du beim einlesen der Nutzereingabe diese auch in die entsprechenden Elemente des Arrays speicherst.


Anmelden zum Antworten