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

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

1

21.11.2009, 20:12

SDL überschreibt iostream ???

Hallo,
Ich habe folgendes Problem mit dem Code:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "Framework.hpp"
#include "Game.hpp"
#include <iostream>

int main (int argc, char *argv[])
{
    int Selection;
    Selection=1;
    do
    {
    Start:
        while(Selection!=1&&Selection!=2&&Selection!=3);
        {
            cout<<"*****Menue*****\n";
            cout<<"(1) Spiel starten\n";
            cout<<"(2) Highscore einblenden\n";
            cout<<"(3) Spiel beenden\n";
            cin>>Selection;
            if (Selection==1);
            {
                goto Continue;
            }
            if (Selection==2);
            {
                cout<<"Highscore:\n";
                goto Start;
                //Auslesen des Highscores

            }
            if (Selection==3);
            {
                return(0);
            }
        }
        Continue:
        // Framework initialisieren

        if (g_pFramework->Init (800, 600, 16, true) == false)
        return (0);
  
        // Neue Instanz des Spiels

        CGame Game;

        // Spiel initialisieren

        Game.Init ();

        // Spiel laufen lassen. Diese Funktion läuft so lange,

        // bis das Spiel geschlossen oder die Escape-Taste

        // gedrückt wird

        Game.Run ();

        // Spiel beenden

        Game.Quit ();

        // Framework beenden

        g_pFramework->Quit ();
        g_pFramework->Del ();
    }while(Selection!=3);

  return (0);

}


Soo.. mein Problem:
(ja ich weiss das Goto keine gute Lösung ist aber sonst spackt das Proggi)
Es lässt sich kompilieren.
AAAber:
Wenn ich das Spiel starte zeigt es das Menü schon an.
Wenn ich auf irgendeine Auswahl klicke, durchläuft das Programm einfach die If - Anfweisungen einfach so, ohne die Werte zu überprüfen.
Zum Beispiel tippe ich 2 ein um die Highscores zu sehen.
Im Programm kommt es garnicht dahin weil es die erste If - Anweiung "mitmacht".

Hoffe auf Antworten und Lösungen.

MfG

2

21.11.2009, 22:10

Ach und, was ich vermute, woran der Fehler liegt:

Du machst nach allen if-Abfragen einen Semikolon, dadurch wird der block

C-/C++-Quelltext

1
2
3
            {
                goto Continue;
            }

unabhängig von der IF-Abfrage ausgeführt.

Sonst "spackt" das Programm ? Was meinst du denn damit ?

Probiers doch mal ohne die ganzen gotos.

was Auch ganz interessant wäre, wenn du mit dem Debugger prüfst, welchen wert Selection nach der Zeile

C-/C++-Quelltext

1
        cin>>Selection; 

hat.

Zitat

Im Programm kommt es garnicht dahin weil es die erste If - Anweiung "mitmacht".

was ist da mit mitmacht gemeint ?

Wieso wird denn das überhaupt kompiliert ?

C-/C++-Quelltext

1
while(Selection!=1&&Selection!=2&&Selection!=3);


da ist doch eindeutig ein Semikolon zuviel.

Probiers also mal so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
            if (Selection==1)
            {
                goto Continue;
            }
            if (Selection==2)
            {
                cout<<"Highscore:\n";
                goto Start;
                //Auslesen des Highscores

            }
            if (Selection==3)
            {
                return(0);
            }

ich1994

Treue Seele

  • »ich1994« ist der Autor dieses Themas

Beiträge: 164

Wohnort: Erlangen(nähe Nuernberg)

Beruf: Bald Abiturient(kein job eig...)

  • Private Nachricht senden

3

22.11.2009, 10:39

oo wegen den IF-Semikolons ist es wirklich nicht gegangen.
hatte es falsch in errinerung^^
also danke nochmals

4

22.11.2009, 13:55

Zitat von »"E122"«

Wieso wird denn das überhaupt kompiliert ?

C-/C++-Quelltext

1
while(Selection!=1&&Selection!=2&&Selection!=3);


da ist doch eindeutig ein Semikolon zuviel.

nein, wiso? while(Bedingung) Anweisung; ist korrekte Syntax, wenn man nur eine Anweisung hat. bzw. while(Bedingung); hat halt eben ne leere Anweisung, bringt also nur was, wenn die bedinung nebenwirkungen hat - dementsprechend wird oben das compiliert, macht aber kenen sinn.

5

22.11.2009, 14:02

OH :oops: Haste wohl recht. Aber troztdem eine Falle, für alle die, die aus versehen mal auf die , und die Shift Taste kommen.
|
\ /
ein Weiterer Grund die Höchste Warnstufe beim
Compiler einzustellen

Werbeanzeige