Warum kommt die 2. Ausgabe nicht?!



  • Hallo!

    Ich bin noch nicht lang am Programmieren mit C++ und komme gerade mit einem kleinen Übungsprogramm nicht weiter...

    #include <cstdlib>
    #include <iostream>
    #include <strings>
    
    using namespace std;
    
    int main()
    {
        // Variablen und Strings
        string name; 
        int m, w, geschlecht;
    
        //Begrüßung + Eingabe des Namens
        cout << "Hallo! Wie heissen sie?!" << endl;
        getline (cin,name);
        cout << endl;
        cout << "Danke " << name << endl;
    
        // Abfrage ob männlich oder weiblich
        cout << "Bist du eine Frau oder ein Mann?" << endl;
        cin >> geschlecht >> m || w ;
    
        if (geschlecht == m)
        {
            cout << "Okay, Herr " << name << endl;
        }    
        else 
        {
            cout << "Alles klar Frau " << name << endl;    
        }
    
        system ("PAUSE");
        return 0;
        }
    

    Nach der Eingabe des Strings Name hört das Programm auf!

    Eigentlich will ich, das nach der Eingabe einen Abfrage über das Geschlecht und danach die entsprechende Begrüßund dahinter kommt...

    Was ist falsch?!

    P.S.: Die ist ja wie gesagt nur ein Übungsprogramm, also wär es cool wenn ihr mir sagt wo mein(e) Fehler liegen... THX!

    _________________________________________________________________________________

    Ich hab das ganze mal mit switch -case Probiert... klappt ebenfalls nicht! 😞

    #include <cstdlib>
    #include <iostream>
    #include <strings>
    
    using namespace std;
    
    int main()
    {
        // Variablen und Strings
        string name; 
        char m, w, geschlecht_eingabe;
    
        //Begrüßung + Eingabe des Namens
        cout << "Hallo! Wie heissen sie?!" << endl;
        getline (cin,name);
        cout << endl;
        cout << "Danke " << name << endl;
    
        // Abfrage ob männlich oder weiblich
        cout << "Bist du eine Frau oder ein Mann? (m/w)" << endl;
        cin >> geschlecht_eingabe;
    
        switch (geschlecht_eingabe)
        {
            case 'm':
                cout << "Okay, Herr " << name << endl;
            break;
    
            case 'w':
                cout << "Okay, Frau " << name << endl;
                break;
        }
    
        system ("PAUSE");
        return 0;
        }
    


  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Was bedeutet "...hört das Programm auf!"? Absturz?

    Achso, lies dir mal die Threads aus dem Win32 Konsolen FAQ durch, da kannst du noch einiges rausgewinnen...



  • Nein... die Abfrage ob Männlich oder Weiblich wird nich ausgeführt!

    Das Programm beendet nach

    cout << "Danke " << name << endl;
    


  • Crew06ZW schrieb:

    Nein... die Abfrage ob Männlich oder Weiblich wird nich ausgeführt!

    Das Programm beendet nach

    cout << "Danke " << name << endl;
    

    Das Programm läuft schon bis zum Ende durch. Das ist unter Umständen ganz normales Verhalten. Bei mir (einer Linux-Konsole) verhält sich das Programm wie gewünscht.

    Ich gehe davon aus, dass ich noch Zeichen im Eingabestrom befinden (in diesem Fall ein Newline), welche von der Abfrage ob männlich oder weiblich direkt weiterverarbeitet wird.

    Du musst (weil du getline verwendest) den Eingabestrom (cin) synchronisieren bzw. ""flushen"".

    Warum du drei Variablen (m, w, geschlecht) definierst, obwohl du nur ein Merkmal verwendest, ist mir auch noch nicht ganz klar.

    Grüße...

    Heiko



  • Hm... okay!

    Kannst du mir sagen wie man die Fehler nun behebt?!



  • Hallo,

    Ein paar Fragen, die du dir zu deinen ersten Programmen stellen solltest:
    - Wie soll das Geschlecht eingelesen werden bzw. welcher Variablentyp soll dafür verwendet werden? (Du verwendest ints, was imho nicht so viel Sinn macht, weil es sehr unintutitiv ist, wenn man z.B. 0 für mänlich und 1 für weiblich eingeben muss).
    - Wie prüfst du, was der User eingegeben hat? (Dein erstes Programm gibt männlich aus, wenn du die gleiche Eingabe für die Variable eingabe und die Variable m machst... ansonsten ist die Ausgabe weiblich. Das ist auch nicht wirklich intuitiv)
    - Warum schreibst du cin >> eingabe >> m || w; ?

    bwbg schrieb:

    Ich gehe davon aus, dass ich noch Zeichen im Eingabestrom befinden (in diesem Fall ein Newline), welche von der Abfrage ob männlich oder weiblich direkt weiterverarbeitet wird.

    der operator>>(char&) von istream ignoriert alle Whitespaces am Anfang. Von daher sollte diese Vermutung unkorrekt sein. (oder täusche ich micht jetzt).

    Gruß, Caipi



  • Okay... ich hab jetzt alle "endl" für "\n" ersetzt... dennoch klappt es nicht!

    Ich werde jetzt nochmal versuchen das Programm zu überarbeiten und gucke mal was ich anhand deiner Tipps machen kann!

    Thx!

    ___________________________________________________________________________________

    Ich habs mal anders Probiert, klappt aber immer noch nicht... 😞

    #include <cstdlib>
    #include <iostream>
    #include <strings>
    
    using namespace std;
    
    int main()
    {
        // Variablen und Strings
        string name; 
        char geschlecht_eingabe, m, w;
    
        //Begrüßung + Eingabe des Namens
        cout << "Hallo! Wie heissen sie?!" << endl;
        getline (cin, name);
        cout << "\n";
        cout << "Danke " << name;
    
        // Abfrage ob männlich oder weiblich
        cout << "Bist du eine Frau oder ein Mann? (m/w) \n";
        cin >> geschlecht_eingabe;
    
        switch (geschlecht_eingabe)
        {
            case 'm':
                cout << "Okay, Herr \n" << name;
            break;
    
            case 'w':
                cout << "Okay, Frau \n" << name;
                break;
    
            default:
                cout << "Die Eingbe ist ungueltig!" << endl;
    
        }
    
        system ("PAUSE");
        return 0;
        }
    


  • Die Ausgabe ist schon ok, da kannst du ruhig das endl lassen. Nur bei der Eingabe könnte was schieflaufen, setz mal vor das cin >> geschlecht_eingabe; ein cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); .



  • Klappt immer noch nicht!

    Man!!!! So schwer kann das doch net sein!!!

    Was mache ich den nur falsch!



  • die lösung ist einfach:

    bei deiner if abfrage

    if (geschlecht == m)
    

    liegt der fehler. denn hier vergleichst du den INHALT der variablen geschlecht mit den INHALT der variablen m, und nicht mit dem ASCII-zeichen m.

    die richtige abfrage sieht dann so aus:

    if (geschlecht == 'm')
    


  • Ups! 😃

    JUHU! Endlich hab ich meinen Fehler entdeckt!

    1A! Danke dir!

    👍 👍 👍


Anmelden zum Antworten