Ratespiel wiederholen (Problem)



  • Hi, ich wollte mal aus Übungszwecken ein Ratespiel schreiben^^
    Es soll 3 mal eine Zahl zwischen 1 und 15 geraten werden und am schluss soll mann gefragt werden ob mann das Spiel wiederholen will.

    //Übung
    #include<iostream>
    #include<time.h>
    #include<stdlib.h>
    #include<string>
    
    using namespace std;
    
    int main()
    {
    	cout << "Die Regeln sind:\n"
    		 << "                1. Der PC sucht sich eine Zahl zwischen 1 und 15  aus\n"
    		 << "                2. Sie haben 3 Versuche um die Zahl zu erraten\n"
    		 << "Los gehts! Raten Sie mal!" << endl;
    	time_t zahl;
    	srand((unsigned) time(&zahl));
    	zahl = (rand() & 15) + 1;
    	double zahl2;
    	char wb = 'w';
    again:
    	while (wb == 'w')
    	{
    		for (int i = 0; i < 3; i++)
    		{
    			cin >> zahl2;
    			if (zahl == zahl2)
    			{
    				cout << "Bravo, Sie haben richtig geraten!" << endl;
    				break;
    			}
    			if (zahl2 < zahl)
    			{
    				cout << "Die Zahl ist zu klein!" << endl;
    
    			}
    			if (zahl2 > zahl)
    			{
    				cout << "Die Zahl ist zu groß!" << endl;
    			}
    			if (i == 3)
    			{
    				cout << "Ich habe gewonnen!" << endl;
    			}				
    		}	
    	cout << "Wiederholen -> [w], Beenden -> [b]" << endl;
    	cin >> wb;
    	goto again;
    	}
    }
    

    Aber wenn ich das Programm starte funktioniert erst alles bis auf das wiederholen... wenn ich "w" eingebe macht das Programm blos einen Zeilen Umsprung und sonst tut sich Garnichts.

    Hoffe mir kann irgendjemand helfen 🙂

    fg Wurst 🕶



  • Gib mal nach dem Zeilensprung einfach eine Zahl ein.

    Dann solltest du merken, wo dein Denkfehler liegt.;)

    btw:
    Das goto kannst du da rausnhemen. Du hast ja bereits eine Schleife!

    EDIT:
    Achja.. Dafür das du ein Anfänger bist muss ich dich mal loben für die schönne Einrückung! 👍
    45 und 46 könntest du noch auf die gleiche Höhe, wie das for nehmen, aber ansonsten sehr schön!



  • Warum comparst du int und double ? Warum hast du ein goto und ein while , wo doch das while alleine den Zweck beider Befehle stilvoller erfüllen würde? 😕

    Anyway, ich glaube du verwirrst dich mit deiner Ausgabe selbst. Nimm die Aufforderung, weitere Zahlen einzugeben in das while und lösch dein goto .

    MfG


  • Administrator

    Wieso um alles in der Welt hast du ein goto drin?
    <time.h> ist kein C++ Header, richtig wäre: <ctime>
    <stdlib.h> ist kein C++ Header, richtig wäre: <cstdlib>

    Ansonsten funktioniert das Programm einwandfrei. Naja vielleicht solltest du noch die Zeile 14 rausnehmen und dafür vor die Zeile 25 einfügen:

    // ...
        cout << "Die Regeln sind:\n"
             << "                1. Der PC sucht sich eine Zahl zwischen 1 und 15  aus\n"
             << "                2. Sie haben 3 Versuche um die Zahl zu erraten\n"
             // << "Los gehts! Raten Sie mal!" << endl; RAUS DAMIT
             << endl;
        time_t zahl;
        srand((unsigned) time(&zahl));
        zahl = (rand() & 15) + 1;
        double zahl2;
        char wb = 'w';
    
        while (wb == 'w')
        {
            for (int i = 0; i < 3; i++)
            {
                cout << "Los gehts! Raten Sie mal!" << endl; // REIN DAMIT
                cin >> zahl2;
    // ...
    

    So macht es nicht nur einen Zeilensprung, sondern gibt dir auch noch eine vernünftige Angabe, was du als nächstes tun sollst.

    Grüssli



  • Dravere du machst es ihm viel zu einfach. 😉 - Man soll seine Fehler ja auch noch selbst finden dürfen. :p



  • achso jetzt check ichs.... 🤡 es hat die ganze zeit schon funktioniert aber es wurde halt immer eine Eingabe verlangt^^ deshalb der Zeilenumbruch...

    @Drakon: Danke 😃 Ich finde es irgendwie blöd wenn mann Code so unübersichtlich
    schreibt und ihn damit um einiges schwerer zu lesen macht sogar für
    einen selber^^

    Ok also nochmal danke für die tollen Antworten 😃


Anmelden zum Antworten