Keine Ausgabe des strings ab dem Leerzeichen?

3 Antworten

  • operator>>(istream&, string) überspringt Whitespace und liest dann alle Zeichen bis zum nächsten Whitespace (welches in der Eingabe stehen bleibt). Das entspricht scanf(" %s", str) in C. Wenn Du damit Leerzeichen lesen kannst, ist das sicher kein Standard-C++.
  • getline(istream&, string&) liest alle Zeichen bis zum nächsten Zeilentrenner. Der Zeilentrenner wird gelesen, aber nicht gespeichert. Das entspricht scanf("%[^\n]%*c", str) in C.

cin bricht bei einem Leerzeichen ab. Wenn du mit Leerzeichen via cin einlesen willst, wäre statt

cin >> lol;

nun zu verwenden: [1]

getline(cin, lol);

Und lass dich von dem anderem Kommentator nicht abschrecken. C++ hat viele Vorteile gegenüber C, wenn man sich auf die richtigen Features fokussiert und die vielen Möglichkeiten seit C++11 nutzt. (siehe z.B. memory management über smart poninter wie unique_ptr im Vergleich zu dem -- inbesondere im Bezug auf exceptions -- schnell unsicherem Zeug, das in C verwendet wird).

[1] http://www.cplusplus.com/doc/tutorial/basic_io/

Cin und cout so zu verwenden verursacht meines Wissens nach nur Probleme aus den unterschiedlichsten Gründen.

Ich würde stattdessen Eher Methoden wie printf oder fgets nutzen.

Evtl. musst du auch iregndetwas flushen.


AlexAA295 
Fragesteller
 09.11.2019, 16:40

Es ist halt so, dass es unter Windows geklappt hat und auf Linux mit den exakt selben Quellcode halt nicht.
Mit getline(cin) klappt es, mit scanf und printf auch (wollte aber eigentlich schon beim "modernen" C ++ bleiben und nicht C - Sachen auspacken xD)

0
Destranix  09.11.2019, 16:43
@AlexAA295

Ich kenne mich mit C++ wirklich nicht genau aus, um zu erraten, warum das bei dir nicht funzt.

Vermutlich ist das eines der typischen Cin cout oder sonstigen C++-Probleme, die man allein dadurch hat, das die Sprache unübersichtlich und hässlich ist, weshalb ich auch eher pures C bevorzuge.

0