mikrocontroller.net

Forum: Compiler & IDEs std::cin und getline vertragen sich nicht


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich bin gerade am Experimentieren mit.
std::cin>>ganzezahl;
und
std::getline(std::cin,zeichenkette);

Das Problem, wenn diese beide Zeilen untereinanderstehen, dann kann ich 
zwar die Zahl einlesen, aber über getline springt mir das Programm 
drüber.
Wenn ich jedoch die Eingabe der Variable "ganzezahl" herauslösche, dann 
kann ich die "zeichenkette" eingeben.

Wie kann ich es anstellen, dass ich beide Befehle untereinander 
verwenden kann, ohne, dass der zweite ignoriert wird.

Vielen Dank, LG Martin

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> Hallo Leute!
>
> Ich bin gerade am Experimentieren mit.
> std::cin>>ganzezahl;
> und
> std::getline(std::cin,zeichenkette);
>
> Das Problem, wenn diese beide Zeilen untereinanderstehen, dann kann ich
> zwar die Zahl einlesen, aber über getline springt mir das Programm
> drüber.


Was hast du als menschlicher Benutzer gemacht, als du die Zahl 
eingegeben hast.
Du hast gedrückt:  5  7   4     und dann "Return" um anzuzeigen, dass 
die Zahleneingabe beendet ist.

   cin >> zahl;
hat sich die Ziffern 5 7 4 aus dem Einagbestrom geholt um daraus deine 
Zahl zusammenzusetzen.
Aber was ist mit dem "Return"?

Der wartet immer noch im Eingabestrom, bis ihn jemand abholt und etwas 
sinnvolles damit macht.

Zb der getline
Der sieht den "Return" im Eingabestrom und wertet das als: fertige 
Eingabe - ein Leerstring wurde eingegeben.

> Wie kann ich es anstellen, dass ich beide Befehle untereinander
> verwenden kann, ohne, dass der zweite ignoriert wird.

Er wird nicht ignoriert.
Du musst genauer beobachten, was du eingibst bzw. welche Zeichen du 
deinem Programm zur Verarbeitung vorwirfst. :-)

Sieh dir mal die ignore Funktion von Input Streams an. Damit kannst du 
dein Problem sauber lösen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich hätte ich von dir jetzt als Antwort erwartet,
er solle statt der Zahl die Zeile einlesen und dann daraus
erst die Zahl.
:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.