Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

08.01.2011, 23:03

Fehler im Quelltext... aber wo?

Hallo liebe Community,

ich hoffe es ist das richtige Unterforum dafür und zwar habe ich ein kleines Testprogramm geschrieben, dass die Punkte eines abgeschloßenen Spieles errechnen soll. Als Übung habe ich einen kleinen Countdown eingefügt, aber jetzt funktioniert ein Teil des Programmes nicht mehr. Ich habe jetzt schon fast eine halbe Stunde rumgesucht aber irgendwie klappts nicht:


//Die Werte werden abgefragt
cout << "Dieses Programm errechnet deine Punktzahl!" << endl;
cout << "Ein Countdown beginnt das Programm, bei welcher Zahl soll dieser starten?" << endl;
cin >> countdown;
do
{
cout << "Restzeit: " << countdown << endl;
countdown --;
} while (countdown > 0);

menue ();
cin >> eingabe;

if (eingabe == 1)
{
{
cout << "Wie viel Zeit hattest du uebrig?" << endl;
cin >> restzeit;

cout << "Wie viele Monster hast du getoetet?" << endl;
cin >> monster;

gesamtpunkte = berechnepunkte (restzeit, punkteprosek, punkte, monster, punktepromonster);

cout << "Der Highscore liegt bei: " << highscore << " Punkten!" << endl;
}
if (gesamtpunkte < highscore)
{
cout << "Du hast den Highscore leider nicht geknackt!" << endl;
if (gesamtpunkte > highscore)
cout << "Super! Du hast den Highscore geknackt!" << endl;
if (gesamtpunkte == highscore)
cout << "Das war knapp!" << endl;
}
else if (eingabe == 2)
cout << "Das Spiel wird beendet!" << endl;
else
cout << "Falsche Eingabe!" << endl;
}
return 0;
}



Ich habe jetzt die Funktionen und Variablen ausgelassen, weil mit dennen alles in Ordnung ist ( glaub ich zumindest :D)
Der Fehler ist, wenn ich den Countdown (Schleife) abgeschloßen habe, bekomme ich das Menü , das bei dem Wert 2 ja enden sollte und bei allen anderen Eingaben den Text "Falsche Eingabe" auswerfen soll, aber genau dass passiert nicht... Wenn man 1 eingibt läuft alles perfekt weiter, nur werden halt alle Eingaben außer 1 ignoriert :( Ich hoffe, dass das jetzt kein offensichtlicher Fehler ist, ich bin halt noch Anfänger ^^

MFG flo

2

08.01.2011, 23:17

Pack das ganze mal in cpp-tags und rücke ein.
Der Code ist jetzt nicht ganz schlüssig. Du rufst ein Menü in menue() auf und machst danach die abfrage?

if (gesamtpunkte < highscore)
{
cout << "Du hast den Highscore leider nicht geknackt!" << endl;
if (gesamtpunkte > highscore)
cout << "Super! Du hast den Highscore geknackt!" << endl;
if (gesamtpunkte == highscore)
cout << "Das war knapp!" << endl;
}
else if (eingabe == 2)
cout << "Das Spiel wird beendet!" << endl;
else
cout << "Falsche Eingabe!" << endl;
}
return 0;
}
Du fragst da Unsinn ab:
Wenn du den Highscore geknackt hast wird geprüft ob du ihn nicht geknackt hast :D

Wenn nicht, aber 2 eingegeben wurde, wird das Spiel beendet.

MfG

3

08.01.2011, 23:40

Hi

Du fragst da Unsinn ab:

Wenn du den Highscore geknackt hast wird geprüft ob du ihn nicht geknackt hast :D
Müsste ich dass dann mit else if machen? Also das das heißen würde, falls die gesamtpunkte kleiner sind als der highscore dann...Andernfalls prüfe ob die Gesamtpunkte größer sind als der Highscore.

4

08.01.2011, 23:42

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    //Die Werte werden abgefragt
    cout << "Dieses Programm errechnet deine Punktzahl!" << endl;
    cout << "Ein Countdown beginnt das Programm, bei welcher Zahl soll dieser starten?" << endl;
    cin >> countdown;
    do
    {
        cout << "Restzeit: " << countdown << endl;
        countdown --;
    } while (countdown > 0);

    menue ();
    cin >> eingabe;

    if (eingabe == 1)
    {
        {
    cout << "Wie viel Zeit hattest du uebrig?" << endl;
    cin >> restzeit;

    cout << "Wie viele Monster hast du getoetet?" << endl;
    cin >> monster;

    gesamtpunkte = berechnepunkte (restzeit, punkteprosek, punkte, monster, punktepromonster);

    cout << "Der Highscore liegt bei: " << highscore << " Punkten!" << endl;
        }
    if (gesamtpunkte < highscore)
        {
        cout << "Du hast den Highscore leider nicht geknackt!" << endl;
    if (gesamtpunkte > highscore)
        cout << "Super! Du hast den Highscore geknackt!" << endl;
    if (gesamtpunkte == highscore)
        cout << "Das war knapp!" << endl;
        }
    else if (eingabe == 2)
        cout << "Das Spiel wird beendet!" << endl;
    else 
        cout << "Falsche Eingabe!" << endl;
    }
    return 0;
}


So, hier nochmal etwas einfacher , sorry stoni, ich wusste nicht dass man das machen kann :P

5

08.01.2011, 23:57

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    //Die Werte werden abgefragt
    cout << "Dieses Programm errechnet deine Punktzahl!" << endl;
    cout << "Ein Countdown beginnt das Programm, bei welcher Zahl soll dieser starten?" << endl;
    cin >> countdown;
    do
    {
        cout << "Restzeit: " << countdown << endl;
        countdown --;
    } while (countdown > 0);

    menue ();
    cin >> eingabe;

    if (eingabe == 1)
    {
        
        cout << "Wie viel Zeit hattest du uebrig?" << endl;
        cin >> restzeit;

        cout << "Wie viele Monster hast du getoetet?" << endl;
        cin >> monster;

        gesamtpunkte = berechnepunkte (restzeit, punkteprosek, punkte, monster, punktepromonster);

        cout << "Der Highscore liegt bei: " << highscore << " Punkten!" << endl;
    
        if (gesamtpunkte < highscore)   // Hier kann man sich die Klammern sparen, es folgt nämlich lediglich eine Zeile Quellcode.
                cout << "Du hast den Highscore leider nicht geknackt!" << endl; 
        else if (gesamtpunkte > highscore)
                cout << "Super! Du hast den Highscore geknackt!" << endl;
        else if (gesamtpunkte == highscore)
                cout << "Das war knapp!" << endl;
    }
    else if (eingabe == 2)
            cout << "Das Spiel wird beendet!" << endl;
    else 
            cout << "Falsche Eingabe!" << endl;
    
    return 0;
}


Du hast totales Chaos mit den Klammern angerichtet. VC++ markiert dir doch die Klammern (also die öffnende und passend dazu die schließende) und rückt bei If-Bedingungn etc. auch direkt schon passend ein.

Außerdem solltest du bei der Ausgabe der Gesamtpunkte mit "else if" arbeiten.

Gruß
SaRu_

Gruß
SaRu_

6

09.01.2011, 00:12

Danke für die Amtworten,
dass mit der Übersicht und dem Einrücken werde ich mir zu Herzen nehmen :D
Ich kann das jetzt leider nicht mehr ausprobieren, aber wurden bei dir die if-Bedingungen so eingerückt, wie du es jetzt gezeigt hast, oder hast du das manuell gemacht?


MFG flo

7

09.01.2011, 10:26

SaRus Quelltext würde wahrscheinlich genauso vom Compiler eingerückt.
Nach { einrücken und nach } wieder zurück
Und Übersicht mit Einrücken wird dir sehr schnell etwas bringen :)

MfG
stoni

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

8

09.01.2011, 11:42

noch ein kleiner tipp. die meisten IDEs ermöglichen es mehrere zeilen zu markieren und mit tab einzurücken. das ist sehr praktisch :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

9

09.01.2011, 20:36

Macht man else-if eig nur zur übersichtlichkeit? If und else-if haben so ja keine anderen Funktionen oder?

10

09.01.2011, 20:54

Nein man nutzt es nicht der Übersichtlichkeit wegen, es macht einen Unterschied.

Hast du zwei If-Bedingungen dann werden beide geprüft und ggf. ausgeführt.
Hast du aber zwei Bedingungen mit If & else if, dann wird die else if-Bedingung nur geprüft / ausgeführt, wenn die davor stehende If-Bedingung nicht zutrifft.

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int zahl = 7;

// Beide Ausgaben werden gemacht, denn beide If-Bedingungen werden unabhängig voneinander geprüft und ausgeführt
if(zahl > 5)
    std::cout << "Zahl ist groesser 5" << endl; // Wird ausgegeben

if(zahl > 3)
    std::cout << "Zahl ist groesser 3" << endl; // Wird ausgegeben

// Hier wird nur die erste Ausgabe gemacht, denn für das else if müsste die erste Bedingung falsch sein
if(zahl > 5)
    std::cout << "Zahl groesser 5" << endl; // Wird ausgegeben
else if(zahl > 3)
    std::cout << "Zahl groesser 3" << endl; // Wird NICHT ausgegeben


Hoffe das verdeutlich etwas den Unterschied.

Gruß
SaRu_

Werbeanzeige