2 Fragen



  • Hallo erstmal!
    Bin neu hier im board...

    Ich habe seit ein paar Wochen C++ in der Schule und wir hatten nun die Hausaufgabe auf, ein Programm zu schreiben, bei dem eine zufällig generierte Zahl zwischen 0 und 100 erraten werden muss.
    Das funktioniert bis auf eine Kleinigkeit(Ungültiges else ohne zugehöriges if) auch wunderbar, allerdings würde ich gerne noch eine highscore Liste machen.
    Ist das sehr kompliziert?
    Und was muss ich dazu machen?

    Danke für Hilfe!!

    Hier mein Quellcode:

    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    
    	cout << endl;
    	cout <<"Hallo!" << endl;
    	cout <<"In diesem Spiel muessen sie eine zufaellig generierte Zahl zwischen 0 und 100 "<< endl;
    	cout <<"erraten" << endl;
    	cout <<"Viel Glueck!!!" << endl;
    	cout << endl;
    	cout << endl;
    
    	int weiter;
    	int zufallszahl;
    	int raten;
    	int versuche;
    
    do{
    	zufallszahl = (GetTickCount())%100;
    	versuche = 0;
    
    	do{
    		cout <<"Geben sie nun die Zahl ein: " << endl;
    		cin >> raten;
    
    		if
    			(raten == zufallszahl)
    			cout << zufallszahl <<" war die richtige Zahl!" << endl;
    		else
    			cout <<"Leider falsch!" << endl;
    
    		versuche++;
    
    	}while(raten != zufallszahl);
    
    	cout <<"Sie haben " << versuche <<" Versuche gebraucht" << endl;
        cout << endl;
    	cout << endl;
        cout <<"Wenn sie nochmal spielen moechten, druecken sie die '1' " << endl;
    	cout <<"Wenn sie nicht mehr spielen moechten, druecken sie die '2' " << endl;
    
    	do{
    	cin >> weiter;
    
    	{
    		if (weiter == 1)
    			cout <<"Sie haben sich fuer ein erneutes Spiel entschieden!" << endl;
    			cout << endl; //warum geht das nicht?
    
    		else if (weiter == 2) //else ohne zugehöriges if!!!
    			cout <<"Vielen Dank, dass sie dieses Spiel gespielt haben." << endl;	
    			cout << endl;  //und hier auch nicht...
    		else //else ohne zugehöriges if!!!
    			cout <<"Bitte geben sie '1' oder '2' ein!!!" << endl;
    			cout << endl; 
    
    	};
    
    	}while(weiter != 1);
    
    		}while(weiter == 1);
    
    getch ();
    return 0;
    }
    


  • Wenn du nach if oder else keine geschweifte Klammer aufmachst, dann gehört nur die nächste Anweisung zum if- bzw. else-Block.

    Richtig wäre also:

    if (weiter == 1)
            {
                cout <<"Sie haben sich fuer ein erneutes Spiel entschieden!" << endl;
                cout << endl; //warum geht das nicht?
            }
            else if (weiter == 2) //else ohne zugehöriges if!!!
            {
                cout <<"Vielen Dank, dass sie dieses Spiel gespielt haben." << endl;   
                cout << endl;  //und hier auch nicht...
            }
            else //else ohne zugehöriges if!!!
            {
                cout <<"Bitte geben sie '1' oder '2' ein!!!" << endl;
                cout << endl;
            }
    

    Da aber die letzte Anweisung in allen drei Blöcken gleich ist, kannst du es auch gleich so machen:

    if (weiter == 1)
            {
                cout <<"Sie haben sich fuer ein erneutes Spiel entschieden!" << endl;
            }
            else if (weiter == 2) //else ohne zugehöriges if!!!
            {
                cout <<"Vielen Dank, dass sie dieses Spiel gespielt haben." << endl;   
            }
            else //else ohne zugehöriges if!!!
            {
                cout <<"Bitte geben sie '1' oder '2' ein!!!" << endl;
            }
            cout << endl;
    


  • ich korrigiere erstmal das, was mir beim drüberguggen aufgefallen ist:

    #include <iostream>
    //#include <windows.h> *sniep* das brauch man hier nicht
    //#include <conio.h> *sniep* getch kann durch cin.get() ersetzt werden
    
    if (weiter == 1){
                cout <<"Sie haben sich fuer ein erneutes Spiel entschieden!" << endl;
                cout << endl; //warum geht das nicht?
            }
            else if (weiter == 2){
                cout <<"Vielen Dank, dass sie dieses Spiel gespielt haben." << endl;   
                cout << endl;  //und hier auch nicht...
            }
            else{
                cout <<"Bitte geben sie '1' oder '2' ein!!!" << endl;
                cout << endl; 
            }
    

    wenn ein if/else für mehr als eine zeilen gelten sollten, muss der code dazwischen geklammert werden

    @virtuell ich bin immer überall und allzeit bereit 🤡



  • Nabend,

    wenn einem 'if' mehr als eine Anweisung folgt, dann musst du einen neuen Block
    oeffnen (gleiches gilt fuer 'else').

    Eine Highscore sollte kein Problem sein. Du schreibst die Highscore einfach in
    eine Datei. Schau dir hierzu mal die std::fstream-Klasse an, die bietet dir
    alles, um in eine Datei zu schreiben und aus ihr zu lesen.

    [edit]
    verdammt otze, mach doch mal was langsamer 😃
    [/edit]

    mfg
    v R



  • Hallo!
    Erstmal Danke für die schnellen Antworten!

    @ otze:
    Die windows.h brauche ich für GetTickCount.
    Falls es von Bedeutung ist, sollte ich vielleicht dazu sagen, dass ich mit Microsoft Visual Studion .Net arbeite.

    @ virtuell:
    Ich habe leider keine Ahnung, wo ich die std::fstream Klasse finde oder wie ich sie erstellen muss und wie ich mit ihr umzugehen habe, da wir noch keine Klassen behandelt haben...

    Wäre nett, wenn du das nochmal erklären könntest oder mir einen link schickst, wo das erklärt wird.

    Danke!



  • Nabend,

    du findest die fstream-Klasse in der Headerdatei <fstream>. Einsetzen kannst du
    sie z. B. so:

    std::fstream fileOut("test.txt");
    
        if(!fileOut) {
             //fehlerbehandlung, datei konnte nicht geoeffnet werden
        }
    
        std::vector<std::string> fileContent;
    
        { //wir brauchen currentLine hiernach nicht mehr
            std::string currentLine;
            //datei in vector einlesen
            while(getline(fileOut, currentLine))
                fileContent.push_back(currentLine);
        }
    
        //angenommen, in der datei steht in jeder zeile ein name, dann stehen
        //diese jetzt in fileContent; suchen nach 'Tom'
        for(size_t i = 0; i < fileContent.size(); ++i)
            if(fileContent[i] == "Tom") {
                fileContent[i] = "Thomas";
                break;
            }
    
        for(size_t i = 0; i < fileContent.size(); ++i)
            fileOut<<fileContent[i]<<"\n";
    
    fileOut.close();
    

    Auf diese Art und Weise kannst du fstream einsetzen. Fuer genaueres, les bitte
    in deinem Buch nach oder schau dir mal folgende Links an:

    http://gethelp.devx.com/techtips/cpp_pro/10min/2001/june/10min0601-2.asp
    http://www.builderau.com.au/program/java/0,39024620,20273896,00.htm

    mfg
    v R



  • Nochmal danke für die Hilfe!

    Ich musste die Aufgabe leider gestern schon abgeben und habe es deswegen nicht mehr geschafft eine highscoreliste zu machen.

    Wir haben allerdings schon eine neue Aufgabe bekommen und ich werde es dort nocheinmal versuchen 🙂

    MfG, Alex™


Anmelden zum Antworten