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

Thunderstone

Frischling

  • »Thunderstone« ist der Autor dieses Themas

Beiträge: 4

Wohnort: Österreich - Graz

Beruf: EDV - Techniker

  • Private Nachricht senden

1

13.08.2006, 06:29

Frage zur switch - case Anweisung

Hi

Also ich muss jetzt doch einmal nach längerem Nachdenken fragen wie man in einer case Anweisung zwei verschiedene Bedingungen angibt um zu einem bestimmten Punkt zu verzweigen. In meinem Fall versuche ich nur wie in dem vorhergehenden Beispiel in dem Buch mit den if, else if und else Anweisungen mit den logischen Operatoren die Eingabe von Groß- und Kleinschreibung zu ermöglichen. Hier ist mein Quellcode:

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
#include <iostream>

using namespace std;

int main()
{
    char Auswahl;
    
    cout << "(N)eues Spiel, (L)aden, (O)ptionen, (B)eenden" << endl;
    cin >> Auswahl;
    
    switch (Auswahl)
    {
        case ('n' || 'N'):
            {
                cout << "Es wird ein neues Spiel gestartet" << endl;
                system("Pause");
            } break;
            
            case ('l'):
                {
                    cout << "Der letzte Spielstand wird geladen" << endl;
                    system("Pause");
                } break;
                
                case ('o'):
                    {
                        cout << "Optionen werden geladen" << endl;
                        system("Pause");
                    } break;
                    
                    case ('b'):
                        {
                            cout << "Das Spiel wird beendet" << endl;
                            system("Pause");
                        } break;
                        
                        default:
                            {
                                cout << "Keine richtige Eingabe" << endl;
                                system("Pause");
                            }
                        }
                        cout << "Programmende" << endl;
                        system("Pause");
                        
                                return 0;
                            }


Wie man in der ersten case Anweisung sieht versuche ich das mit dem logischen Operator "oder" zu realisieren. Das Compilieren funktioniert tadellos. Jedoch wird meine Eingabe dann von "default:" abgefangen. Was mache ich falsch? Ich muss doch nicht wirklich eine extra case Anweisung dafür schreiben oder? Wenn das so wäre würde der Vorteil von den switch - case Anweisungen zu den if, else if und else Anweisungen ja doch nicht mehr so groß sein oder? Bei denen hat das mit den Vergleichen noch ganz gut funktioniert. Danke schon mal im Voraus für eure Hilfe. Das kann ja kein all zu großer Fehler sein denk ich mir mal

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

13.08.2006, 09:25

Überleg dir mal, was der logische oder-Operator || macht.
Er schaut, ob eines der beiden Argumente "wahr" ist und liefert dann "wahr" oder ansonsten "falsch".
'n' ist nicht null, ebensowenig wie 'N'. Also ist ('n' || 'N') gleich "wahr" (true). Wunderst du dich jetzt noch, warum diese case-Marke nicht angesprungen wird?

Dies ist eine der Schwachstellen von C++ (implizites Umwandeln von integralen Typen nach bool). Java hat das besser gelöst. Dort könntest du solchen Code gar nicht erst kompilieren.

Was du machen willst ist:

C-/C++-Quelltext

1
2
3
4
5
6
case 'n':
case 'N':
    {
       ...
    }
    break;


Zitat von »"Thunderstone"«

Bei denen hat das mit den Vergleichen noch ganz gut funktioniert.

Ja, aber da schreibst du ja auch nicht

C-/C++-Quelltext

1
if(Auswahl == ('n' || 'N'))


sondern

C-/C++-Quelltext

1
if((Auswahl == 'n') || (Auswahl == 'N'))


(die Klammern unten sind nur zur Verdeutlichung da)

Thunderstone

Frischling

  • »Thunderstone« ist der Autor dieses Themas

Beiträge: 4

Wohnort: Österreich - Graz

Beruf: EDV - Techniker

  • Private Nachricht senden

3

13.08.2006, 14:52

Aaaaaah. Verstehe. Da stolper ich hoffentlich nicht mehr so schnell drüber. Sind ja erst die ersten Kapitel. Und wenns mich bei denen schon aufprakt brauch ich die nächsten erst garnicht ausprobieren ^^ Aber wenigstens fliege ich nicht mehr auf so dumme Fehler rein wie ein "&" in C zu vergessen oder eben einen ";" in C und C++. Puh. Ich bin froh, dass das Buch so gut aufgebaut ist. Es macht richtig Spaß zu lesen. Danach ist dein Buch dran :). Ihr werdet euch doch sicher absprechen und ähnlich schreiben oder? Naja. Auf jeden Fall tolle Arbeit! Auch das mit dem Forum bzw. Board hier. Danke für deine Antwort David! Ich werde hier definitiv noch öfter nach Rat fragen ... müssen. Da komm ich nicht drum herum

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

4

13.08.2006, 17:01

Zitat von »"Thunderstone"«

Ihr werdet euch doch sicher absprechen und ähnlich schreiben oder?

Eigentlich nicht. ;) Es sind zwei unabhängig voneinander geschriebene Bücher, die jedoch trotzdem hintereinander bearbeitet/gelesen werden können.
mfg
john

Thunderstone

Frischling

  • »Thunderstone« ist der Autor dieses Themas

Beiträge: 4

Wohnort: Österreich - Graz

Beruf: EDV - Techniker

  • Private Nachricht senden

5

13.08.2006, 20:26

Das war eigentlich eh klar. Am Buch von C++ für Spieleprogrammierer steht eh drauf, dass das Buch 3D-Spieleprogrammierung die perfekte Ergänzung dafür ist oder so. Hab erst durch die Seite gemerkt das hier beide Autoren vertreten sind

Anonymous

unregistriert

6

13.08.2006, 20:39

Perfekt würde ich nicht sagen, aber man kann sicherlich mit dem Buch
3D-Spieleprogrammierung weitermachen, dazwischen sollte man aber
meiner Meinung nach einen etwas größeren Abstecher zu DDraw/D3D
machen, also zum Thema 2D Grafik-Programmierung. Ich finde die
SDL reicht da nicht ganz aus.

Sheddex

unregistriert

7

13.08.2006, 20:56

Ich hab's doch auch ohne DirectDraw geschafft ;)
Ich fand das Problem eigentlich nicht Direct3D sondern eher andere Sachen, ka was, jetzt weiß ich alles, aber da in der 2. Auflage von Heikos Buch auch Windowsprogrammierung drangenommen wird müsste es eigentlich einfacher sein in Davids Buch einzusteigen.

Anonymous

unregistriert

8

13.08.2006, 21:26

Wie gesagt, klar schaffts man ohne DDraw, usw. aber ist doch irgendwie
blöd, wenn man nur 3D und Konsolenkram drauf hat Oo da fehlt einfach
was! Wie gesagt, ist meine Meinung.

Werbeanzeige