Problem mit cin.getline()



  • Hallo,

    ich habe nun schon 2 Tage gegoogelt und alle möglichen Seiten und Tutorials durchgelesen, leider jedoch noch keine funktionierende Lösung, geschweige denn Antwort für mein Problem gefunden. Ich hoffe hier kann mir geholfen werden.

    int main()
    {
    
    int nr;  //eingegebene Nr.
    char name[20];
    
    cout <<"Eingabe:"<<endl;
    cout <<"Eingabe einer Nummer: ";
    
    cin >> nr;
    cout << auswahlnr<<endl;
    
    cout <<"Bitte geben Sie den Namen ein (max. 19 Zeichen Länge): ";
    cin.getline(name,20);
    //cin >> name;
    cout<<'\n';
    cout<<"Der eingegebene Name lautet: "<<name <<endl;
    
    return 0;
    }
    

    So sieht mein Code aus und der Befehl cin.getline() wird einfach übersprungen. Schreibe ich nur cin >> name; dann funktioniert alles wie gewünscht. Wie bekomme ich mein cin.getline() an dieser Stelle zum korrekten funktionieren?

    Bitte möglichst keine erweitereten Befehle zur Lösung benutzen. Habe schon fflush und anderes gefunden gehabt, aber soweit bin ich im Buch noch nicht, also kann ich diese daher noch nicht einsetzen. Gebracht hatten Sie ohnehin nichts. Es muss eine Möglichkeit geben mit den cin Befehlen cin.clear() und cin.ignore(). Beide habe ich nach dem ersten cin versucht, jedoch hat das am Problem nichts geändert.

    Danke für Eure Hilfe.



  • Suseplus schrieb:

    Schreibe ich nur cin >> name; dann funktioniert alles wie gewünscht.

    Prima, dann benutze doch einfach das.

    Falls das nicht die Antwort ist, die Du erwartet hast, solltest Du vielleicht die Frage nochmal formulieren. Was genau möchtest Du eigentlich tun? und warum willst Du cin >> name; nicht benutzen?



  • das
    cin >> nr;
    liest alle deine ziffern ein aber läßt die return-taste, die du zum abschluss gedrückt hast, einfach im stream stehen.
    ein nachfolgendes
    cin >> irgendwas;
    liest dann immer zuerst die whiteopaces (return, tab oder space) weg und dann erst die nutzdaten.
    was alkso stört ist dieses eine return, das kannste leicht mit einem cin.get() wegmachen, bevor du die nächste zeile liest.

    cooler ist vielleicht, du rufst sowas wie ne eatwhite auf von http://www.mathcs.sjsu.edu/faculty/pearce/patterns/streams/streams2.html



  • Was du dir noch zusätzlich durchlesen könntest wäre http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.3



  • @Jester, weil die Aufgabe lautet cin.getline zu benutzen, um zuviele eingegebene Zeichen abzufangen.

    cin.get() gabs leider bisher noch nicht in meinem Kurs, ebenso std.

    Wenn ich ein zusätzliches cin >> irgendwas; in der Mitte einfüge, dann funktioniert das cin.getline() auch wieder. Ich mache mir allerdings sorgen, dass dies nicht gerade eine saubere Programmierweise ist.

    Ich hatte die 2 einzelnen cin und cin.getline auch schon in getrente Funktionen gesteckt, aber das führt zum gleichen Effekt. Wohl auch logisch, weil es ja genauso im Speicher bleibt.

    Wenn nach einem cin das Return im Speicher bleibt, wieso funktioniert dann ein weiteres cin, aber kein cin.getline? Gibt es eine Möglichkeit hier etwas anders zu gestalten mit cin und cin.getline?



  • Also mit cin.get() funktioniert es nun auch mit cin.getline().

    Bezogen auf Volkard:
    Da ohne cin.get() ja dieses Return im stream bleibt, wie kann ich es vermeiden, dass dieses Return überhaupt erst zum Problem wird?


Anmelden zum Antworten