Zahlenraten - 1 Frage hab ich noch!!!



  • Programm steht soweit, aber wenn ich mit j antworte und noch einen Durchgang machen möchte, dann nimmt er wieder die selbe Zufallszahl, wie vorher und zählt die versuche weiter. Irgendwo fehlt mir wohl noch eine Schleife ? Oder ?

    P.S. Was sind Codetags ?

    Hier das Programm:

    #include "stdafx.h"
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>

    const wertebereich=999;
    int Zufallszahl (int max_Zufallszahl=wertebereich)

    {
    return rand() %1000;
    }

    int main()
    {
    int Zufallszahl, Ratezahl, i=0;
    char abfrage;

    srand((unsigned)time(NULL));
    rand();

    printf ("Herzlich Willkommen beim Zahlenraten\n\n");
    printf ("Sie muessen versuchen eine von mir per Zufallsgenerator ausgewaehlte\n");
    printf ("Zahl zwischen 0 und 1000 zu erraten!\n\n");
    printf ("Das System gibt Ihnen folgende Hilfe: Wenn Ihre Zahl\n\n");
    printf ("1 bis 10 Nummern < oder > ist als die Zufallszahl erscheint ein Heiss\n");
    printf ("11 bis 50 Nummern < oder > ist als die Zufallszahl erscheint ein Warm\n");
    printf ("51 Nummern < oder > ist als die Zufallszahl erscheint ein Kalt\n\n");
    printf ("Am Ende wird Ihnen die Anzahl Ihrer benoetigten Versuche angezeigt.\n\n");
    printf ("Viel Erfolg!\n\n");
    printf ("Bitte geben Sie eine Zahl ein.\n");

    Zufallszahl = (rand() % 1000);

    do
    {
    scanf ("%d", &Ratezahl);

    if (Ratezahl < Zufallszahl+11 && Ratezahl > Zufallszahl-11)
    printf ("Heiss\n");
    if (Ratezahl > Zufallszahl+10 && Ratezahl < Zufallszahl+51)
    printf ("Warm\n");
    if (Ratezahl < Zufallszahl-10 && Ratezahl > Zufallszahl-51)
    printf ("Warm\n");
    if (Ratezahl < Zufallszahl-50 && Ratezahl >1 || Ratezahl > Zufallszahl+50 && Ratezahl <999)
    printf ("Kalt\n");
    if (Ratezahl > 999)
    printf ("Es werden nur Zahlen zwischen 0 und 1000 gesucht!\n");
    ++i;

    if ( Ratezahl == Zufallszahl )
    {
    printf("Sie haben die richtige Zahl gefunden\n");
    printf("Dazu benoetigten Sie %d Versuche!\n", i);
    printf("Moechten Sie eine weitere Zahl erraten: (j/n) ");
    scanf("%c",&abfrage);
    scanf("%c",&abfrage);
    }

    while(abfrage !='n');
    }



  • Das ist "cpp" von zwei [] eingeschlossen, dann Dein Code und anschliesend ein "/cpp" wieder von [] eingeschlossen...

    Das macht Deinen Code lesbarer, ist dir vieleicht auch aufgelfallen bei den Antworten die Du bekommen hast...



  • Du musst bevor du deine Zufallszahl mit der Funktion rand abfragen kannst die Funktion srand wieder aufrufen sonst kommt wieder die gleiche Zufallszahl heraus. Folglich musst du vor der Zuweisung

    Zufallszahl = (rand() % 1000);
    

    wieder

    srand((unsigned)time(NULL));
    

    einfügen also schaut dein Programm jetzt so aus:

    #include "stdafx.h"
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main()
    {
    int Zufallszahl, Ratezahl, i=0;
    char abfrage;
    
    printf ("Herzlich Willkommen beim Zahlenraten\n\n");
    printf ("Sie muessen versuchen eine von mir per Zufallsgenerator ausgewaehlte\n");
    printf ("Zahl zwischen 0 und 1000 zu erraten!\n\n");
    printf ("Das System gibt Ihnen folgende Hilfe: Wenn Ihre Zahl\n\n");
    printf ("1 bis 10 Nummern < oder > ist als die Zufallszahl erscheint ein Heiss\n");
    printf ("11 bis 50 Nummern < oder > ist als die Zufallszahl erscheint ein Warm\n");
    printf ("51 Nummern < oder > ist als die Zufallszahl erscheint ein Kalt\n\n");
    printf ("Am Ende wird Ihnen die Anzahl Ihrer benoetigten Versuche angezeigt.\n\n");
    printf ("Viel Erfolg!\n\n");
    printf ("Bitte geben Sie eine Zahl ein.\n");
    
    srand((unsigned)time(NULL));
    Zufallszahl = (rand() % 1000);
    
    do
    {
    scanf ("%d", &Ratezahl);
    
    if (Ratezahl < Zufallszahl+11 && Ratezahl > Zufallszahl-11)
    printf ("Heiss\n");
    if (Ratezahl > Zufallszahl+10 && Ratezahl < Zufallszahl+51)
    printf ("Warm\n");
    if (Ratezahl < Zufallszahl-10 && Ratezahl > Zufallszahl-51)
    printf ("Warm\n");
    if (Ratezahl < Zufallszahl-50 && Ratezahl >1 || Ratezahl > Zufallszahl+50 && Ratezahl <999)
    printf ("Kalt\n");
    if (Ratezahl > 999)
    printf ("Es werden nur Zahlen zwischen 0 und 1000 gesucht!\n");
    ++i;
    
    if ( Ratezahl == Zufallszahl )
    {
    printf("Sie haben die richtige Zahl gefunden\n");
    printf("Dazu benoetigten Sie %d Versuche!\n", i);
    printf("Moechten Sie eine weitere Zahl erraten: (j/n) ");
    scanf("%c",&abfrage);
    
    if(abfrage=='j')
    {
    srand((unsigned)time(NULL));
    Zufallszahl = (rand() % 1000);
    }
    }
    
    while(abfrage !='n');
    }
    

    Es würde dir mehr bringen wenn du selbst einbischen mit dem Code spielst 😉



  • hmm, also mit der bis jetzt vorhandenen do-while-Schleife funktioniert nur EIN Rate-Durchgang. Probier mal das: Pack um die gesamte do-while-Schleife nochmals eine do-while-Schleife. In die äußere Schleife kommt: Zähler i auf 0 setzen, Zufallszahl ermitteln. Dann kommt die innere Schleife: Hier lässt Du nur raten! Wenn die Zufallszahl also geraten ist, dann bricht die innere Schleife ab. Abbruchbedingung: Zufallszahl geraten,ok?

    Zurück in der äußeren do-Schleife: Nun ist also die Zahl geraten. Die Abbruchbedingung für die äußere Schleife ist nun, ob der Spieler weiter spielen möchte oder nicht.

    So, nun probier das mal, ich denke, das müsste passen. Vielleicht ginge es auch einfacher, mit einer Schleife, aber das macht ja nix, erst mal sollte es funktionieren, danach optimiert man.

    MFG.



  • AJ hats ja schon gesagt, du machst hier 3 threads auf wegen dem gleichen Thema, und in jedem Thread sind auch immer wieder die gleiche Fehler. Lest doch einfach mal, was euch geantwortet wird. Langsam nervts irgendwie....



  • So habe zur Zeit nichts zu tun... Hoffe dies stimmt jetzt:

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int ZufallszahlBekommen(int Grenze) {
    	srand((unsigned)time(NULL));
    	return rand() % Grenze;
    }
    
    int main(int argc, char* argv[])
    {
    	int Zufallszahl=0, Ratezahl=0, i=0;
    	char abfrage='j';
    
    	printf ("Herzlich Willkommen beim Zahlenraten\n\n");
    	printf ("Sie muessen versuchen eine von mir per Zufallsgenerator ausgewaehlte\n");
    	printf ("Zahl zwischen 0 und 1000 zu erraten!\n\n");
    	printf ("Das System gibt Ihnen folgende Hilfe: Wenn Ihre Zahl\n\n");
    	printf ("1 bis 10 Nummern < oder > ist als die Zufallszahl erscheint ein Heiss\n");
    	printf ("11 bis 50 Nummern < oder > ist als die Zufallszahl erscheint ein Warm\n");
    	printf ("51 Nummern < oder > ist als die Zufallszahl erscheint ein Kalt\n\n");
    	printf ("Am Ende wird Ihnen die Anzahl Ihrer benoetigten Versuche angezeigt.\n\n");
    	printf ("Viel Erfolg!\n\n");
    	printf ("Bitte geben Sie eine Zahl ein.\n");
    
    	while (abfrage=='j')
    	{
    		Zufallszahl=ZufallszahlBekommen(1000);
    		i=0;
    
    		do
    		{
    			scanf ("%d", &Ratezahl);
    			fflush(NULL);
    
    			if (Ratezahl < Zufallszahl+11 && Ratezahl > Zufallszahl-11)
    			printf ("Heiss\n");
    			if (Ratezahl > Zufallszahl+10 && Ratezahl < Zufallszahl+51)
    			printf ("Warm\n");
    			if (Ratezahl < Zufallszahl-10 && Ratezahl > Zufallszahl-51)
    			printf ("Warm\n");
    			if (Ratezahl < Zufallszahl-50 && Ratezahl >1 || Ratezahl > Zufallszahl+50 && Ratezahl <999)
    			printf ("Kalt\n");
    			if (Ratezahl > 1000)
    			printf ("Es werden nur Zahlen zwischen 0 und 1000 gesucht!\n");
    			i++;
    		}
    		while(Ratezahl!=Zufallszahl);
    
    		printf("Sie haben die richtige Zahl gefunden\n");
    		printf("Dazu benoetigten Sie %d Versuche!\n", i);
    		printf("Moechten Sie eine weitere Zahl erraten: (j/n)");
    
    		fflush(stdin);		
    		scanf("%c",&abfrage);
    	}
    
    	return 0;
    }
    


  • @CarstenJ
    Mittlerweilse dürften es sogar 5 sein! Ich bin froh, dass ich nicht alleine mit dieser Meinung dastehe.


Anmelden zum Antworten