cin.ignore() funktionsweise



  • hi, bin c++ anfänger.

    sagen wir ich benutze

    cin >> a;
    

    um einen int a einzulesen. dabei ignoriert cin whitespaces (enter tab leerzeichen). Wenn ich also eine zahl eingebe und enter drücke bleibt das enter ('\n') im input stream drinne.

    wenn ich nun die string liabary mit #include <string> dazufüge kann ich mit der funktion

    getline(cin,b,'\n');
    

    vom inputstream einen string in die string variable b speichern bis zum enter zeichen. Da das enterzeichen allerdings noch immer im input stream ist und auch das 1. zeichen im stream ist wird nichts in b gespeichert.

    um das zu umgehen habe ich rausgefunden ich muss z.b.

    cin.ignore(100,'\n');
    

    direkt nach dem 1. cin >> a; machen. Und das ignoriert/löscht die letzten 100 zeichen aus dem cin und bricht früher ab wenn ein enter zeichen kommt.

    nun meine frage: wenn ich enter5enter drücke müssten ja 2 '\n' im input stream sein und cin.ignore(100,'\n'); dürfte nur eins davon erfassen und getline müsste wieder sofort abbrechen. getline bricht aber nicht sofort ab, warum nicht?



  • cin ignoriert beim Einlesen auch führenden Whitespace. Bei deinem Ennter-5-Enter wird also das erste Enter schon beim Einlesen der Zahl überlesen, danach wird die Zahl eingelesen und ein Enter bleibt im Stream.
    Das ignore brauchst du übrigens nur, wenn du (wie in deinem Beispiel) formatierte und unformatierte Eingabe mischst. Würdest du noch eine Zahl normal einlesen, würde wieder das Enter übergangen werden, ignore wäre also unnötig.


  • Mod

    Das erste Enter wurde von dem cin>>int_variable entfernt, welches allen Whitespace vor der Zahl übergeht und verwirft.

    edit: 20 Sekunden zu langsam.



  • ty


Anmelden zum Antworten