Leerzeichen in der String eingabe MITeinlesen?!



  • Hallo Leute, hab das Problem, dass ich bei der Eingabe eines Strings auch Leerzeichen und alles andere Einlesen will.

    durch cin >> string;
    ging's nicht.

    In Foren meinte man, dadurch solle es gehen:
    getline(cin,string);

    Aber das Problem ist, dass DANN bei der Ausführung er gar nicht nach eine Eingabe auffordert.

    Ein Teil des Codes lautet:

    cout << "\nBitte gewünschten Titel eingeben: ";
    
    					getline(cin,titel);
    
    					cout <<"\nWieviele Tage soll es ausgeliehen werden?";
    					cin >>t;
    

    Bei der Ausgabe gibt er mir:

    Bitte gewünschten Titel eingeben:
    Wieviele Tage soll es ausgeliehen werden?

    Aus ohne bei "Bitte gewünschten Titel eingeben:" auf eine Eingabe zu warten.



  • Du hast vorher etwas mit cin >> .. eingelesen. operator >> lässt das '\n' am Ende aber im Puffer, was dann von getline gelesen wird. Hotfix: std::cin.ignore(std::numeric_limitsstd::streamsize::max(), '\n');
    fflush etc. sind böse.
    Lustig, gab's lange nicht mehr die Frage, kam doch sonst alle drei Tage? 🤡



  • jajajajaajajajjaa ___ STIMMT ^^



  • Wieso eigentlich immer direkt std::numeric_limits<std::streamsize>::max() ? Eigentlich sollte 2 doch reichen.


  • Mod

    Eisflamme schrieb:

    Wieso eigentlich immer direkt std::numeric_limits<std::streamsize>::max() ? Eigentlich sollte 2 doch reichen.

    Und wenn es mehr als 2 sind? Und wieso 2? Es sollte doch 1 reichen (Unterschied zwischen binary und nicht-binary).



  • Also 1 oder 2 weiß ich nicht, ich dachte, auf manchen Systemen ist \r noch dabei?

    Und mehr als 2... wie soll das passieren? Vorher wurde über cin etwas eingelesen und dann enter gedrückt. Das enter wurde nicht eingelesen. Mehr als einmal kann man doch nicht enter drücken als Benutzer?!



  • Evtl. durch Pipes und Co.



  • Eisflamme schrieb:

    Und mehr als 2... wie soll das passieren? Vorher wurde über cin etwas eingelesen und dann enter gedrückt. Das enter wurde nicht eingelesen. Mehr als einmal kann man doch nicht enter drücken als Benutzer?!

    Hä? Wenn ich cin >> s; schreibe und der Benutzer "abc Hallo" eingibt, dann steht " Hallo" danach noch im Puffer. Ob man das einlesen will oder nicht ist eine andere Frage, aber "Zeile ignorieren" geht nun mal so wie oben. 😉



  • Achso, darum geht's. Ich hatte nur das Szenario im Kopf, dass nur noch \n bzw. \r\n im Buffer steht. Dann versteh ich's, danke 🙂


Anmelden zum Antworten