if- else Anwendung.



  • (zweiter gleicher Beitrag, weil ich meinen Beitrag in einem falschen Forum hatte)

    Also hey als erstes mal 🙂

    Ich habe endlich den entschluss gepackt C++ zu lernen, weil ich unbedingt ein eigenes Spiel machen wollte... dazu muss ich, wie ich hörte, zu erst C++ lernen und dan C#.

    naja es fing gut an, aber jetzt habe ich einen Fehler gemacht, aber ich weis nicht wieso.

    Ich nutze auf meinen Mac XCode.

    Bitte sieht euch das mal an ://

    #include <iostream>
    using namespace std;

    int main() {

    int ival = 0;
    cout<< "Bitte geben sie ihre Lieblingszahl ein."<< endl;

    cin>> ival;

    if(cin>> ival) {
    cout<< "Sie gaben die Zahl" << ival << "ein." << endl;
    }
    else {
    cerr<< "Fehler bei der Eingabe." << endl;
    }

    return 0;

    }

    compilieren tuht es, aber wenn ich eine zahl eingebe erscheint immer: (lldb)

    dankee schon mal 🙂



  • miamidya schrieb:

    Ich habe endlich den entschluss gepackt C++ zu lernen, weil ich unbedingt ein eigenes Spiel machen wollte...

    Da hast du dir aber ein hohes Ziel gesetzt

    miamidya schrieb:

    dazu muss ich, wie ich hörte, zu erst C++ lernen und dan C#.

    Nein.

    Zu deinem Problem: Du ließt doppelt ein. Einmal vor der If und einmal als if-bedingung. Eines von beiden muss weg.



  • Lldb ist der Debugger. Hast du einen Breakpoint gesetzt (da ist dann so ein blauer Pömpel links am Rand)?



  • miamidya schrieb:

    Ich habe endlich den entschluss gepackt C++ zu lernen, weil ich unbedingt ein eigenes Spiel machen wollte... dazu muss ich, wie ich hörte, zu erst C++ lernen und dan C#.

    Wer hat das denn behauptet? Eine Sprache reicht natürlich wobei C++ meiner Meinung nach besser ist :D.

    Zu deinem Problem: In deiner if Bedingung wolltest du wohl statt noch einmal die Zahl einzulesen nur prüfen ob die Eingabe erfolgreich war. Dazu kannst du das "fail-bit" testen, was mit cin.fail() geht.



  • Zu deinem Problem: Du ließt doppelt ein. Einmal vor der If und einmal als if-bedingung. Eines von beiden muss weg.

    wie muss es dan aussehen? ich habe es nicht so ganz verstanden.



  • manni66 schrieb:

    Lldb ist der Debugger. Hast du einen Breakpoint gesetzt (da ist dann so ein blauer Pömpel links am Rand)?

    oh danke dieses Problem mit (lldb) ist jetzt weg 🙂 aber die Antwort:

    Si ehaben die zahl ... eingegeben, erscheint erst wenn ich z.b die 3, 2x mal eingebe.



  • Dazu kannst du das "fail-bit" testen, was mit cin.fail() geht.

    ersetzte ich jetzt einfach if durch sin.fail() ?



  • miamidya schrieb:

    Si ehaben die zahl ... eingegeben, erscheint erst wenn ich z.b die 3, 2x mal eingebe.

    Ja weil dein Code zweimal eine Zahl einließt. Schaue dir deinen Code nochmal genau an. Vor allem was du als Bedingung in deinem if benutzt.



  • sebi707 schrieb:

    Ja weil dein Code zweimal eine Zahl einließt. Schaue dir deinen Code nochmal genau an. Vor allem was du als Bedingung in deinem if benutzt.


    cin>> ival;

    if(cin>> ival) {
    cout<< "Sie gaben die Zahl" << ival << "ein." << endl;

    also so verste ich das:

    Die erste Zeile: Inpout ist das ival
    2. Wenn Inpout gleich ival ist, ist das output: "Sie gaben die zahl...ein".



  • Nein immer wenn du cin >> ival schreibst ließt du einen neuen Wert ein und überschreibst den alten ival Wert. Vergleiche sind immer mit == und nicht >> oder irgendwas anderes. Du kannst also nicht doppelt einlesen und so prüfen ob es einen Fehler gab. Dafür gibt es wie gesagt das fail-bit und du kannst testen if(!cin.fail()) oder wenn dein Compiler etwas neuer ist kannst du auch nur if(cin) schreiben.



  • sebi707 schrieb:

    Nein immer wenn du cin >> ival schreibst ließt du einen neuen Wert ein und überschreibst den alten ival Wert. Vergleiche sind immer mit == und nicht >> oder irgendwas anderes. Du kannst also nicht doppelt einlesen und so prüfen ob es einen Fehler gab. Dafür gibt es wie gesagt das fail-bit und du kannst testen if(!cin.fail()) oder wenn dein Compiler etwas neuer ist kannst du auch nur if(cin) schreiben.

    Ich habe es!! Dankeeee. Du warst eine riesen tole Hilfe.

    #include <iostream>
    using namespace std;
    
    int main() {
    
        int ival = 0;
    
        cout<< "Bitte geben sie ihre Lieblingszahl ein."<< endl;
    
        cin>> ival;
    
        if(cin) {
            cout<< "Sie gaben die Zahl" << ival << "ein." << endl;
        }
        else {
            cout<< "Fehler bei der Eingabe" << endl;
        }
    
        return 0;
    
    }
    

    Du hattest recht, das lag an diesem doppelten cin>> ival



  • Da der operator>> den Stream zurück gibt funktioniert

    if(cin >> ival) 
    {
            cout<< "Sie gaben die Zahl" << ival << "ein." << endl;
    }
    

    (also mit dem einlesen direkt im if, aber dann natürlich nicht davor) genauso. Das geht auch mit C++98-Compilern, da gibt es zwar keinen operator bool , aber einen operator void* .



  • patrick246 schrieb:

    Da der operator>> den Stream zurück gibt funktioniert(also mit dem einlesen direkt im if, aber dann natürlich nicht davor) genauso. Das geht auch mit C++98-Compilern, da gibt es zwar keinen operator bool , aber einen operator void* .

    auch dir danke für deine Antwort. jetzt habe ich das Prinzip echt gut verstanden 🙂



  • Ist zwar ein wenig am Thema vorbei, allerdings hört sich die Aussage für Spieleprogrammierung muss C++ und danach C# gelernt werden einfach "Falsch" an.

    Spiele können auf den verschiedensten wegen Programmiert werden und mit den verschiedensten Sprachen, manche sollen einfacher als andere sein, denke es hängt da vom persönlichen Geschmack ab.

    Nur mal ein paar beispiele mit denen ich persönlich Erfahrung gemacht habe.
    Es gibt einige gute Engines und Frameworks auf die man zurückgreifen kann.

    C++: Unreal Engine, SFML, SDL, Allegro
    C#: Unity Engine (auch Boo ~Python und Unityscript ~JavaScript), XNA, Monogame
    Java: LibGDX, JMonkeyEngine
    HaXe: gibt ziemlich viele Frameworks und die Programmiersprache ist ziemlich nice und an ActionScript orientiert.

    Man kann auch definitiv mal ein Blick auf die open-source GodotEngine werfen.

    Kannst dich ja mal informieren möglichkeiten Spiele zu Entwickeln gibts zuhauf. Auch mit diesen Gamemakern wurden schon einige schicke Spiele oder LudumDare/ Game Jams gewonnen.

    Am besten sich einfach mal Informieren, The Forest oder Rust z.B basiert auf der UnityEngine, welche sich nicht verstecken muss was Leistung angeht.
    Bei einem Spiel ist Programmieren eigentlich der kleinste Teil, finde die Grafiken, ob 2 oder 3D, die Musik etc. viel Schlimmer 😃


  • Mod

    Allegro ist für C++-Programmierer kompletter Müll.



  • Arcoth schrieb:

    Allegro ist für C++-Programmierer kompletter Müll.

    Hört sich so an als sei Allegro immer noch in C 😃 Hatte gehört mit Version 5 wäre es geändert worden. Habs mir auch nur mal grob angeguckt, deswegen Vertrau darauf.



  • Danke 🙂 ich werde mich artig weiter informieren



  • Nimm SFML wenn du in C++ ein nettes, kleines 2D Spiel machen willst.

    Undzwar, wie schon richtig erkannt hast, nachdem du mit C++ klar kommst.


Log in to reply