C++ String mit samt leerzeichen einlesen!?
Hallo zusammen. Ich möchte jetzt in einem c++ programm einen, bzw. mehrere strings MIT leerzeichen einlesen. Mit cin >> xyz geht es ja definitiv nicht. mit getline(cin, xyz) soll es ja wohl gehen. doch habe ich da folgendes problem: die eingabe für die variable, also die mit getline aufgerufen wird WIRD EINFACH ÜBERSPRUNGEN!!! Hier der Code. Bitte helft mir danke schonmal
cout << "Welcome to C++ Filecompiler using G++ !\nThis app is proudly presented by Armin Linzbauer, Copyright 2012." << endl;
cout << "\nFirst, this app is going to collect some basic information...\n(Write paths ALWAYS in quotationmarks!!!\n" << endl;
cout << "\nName of source file, type 0 for standard (\"main.cpp\") -" << "\nName: ";
cin >> sourceName;
cout << "Source path (must end with a slash), type 0 for standard (this directory) -" << "\nPath: ";
getline(cin, sourcePath);
//cin >> sourcePath;
cout << "Name target file here, type 0 for standard (\"app\") -" << "\nName: ";
cin >> targetName;
cout << "Target path (must end with a slash), type 0 for standard (this directory) -" << "\nPath: ";
getline(cin, targetPath);
//cin >> targetPath;
cout << sourceName << "; " << sourcePath << "; " << targetName << "; " << targetPath << endl;
cout << matchedSource << endl;
cout << matchedTarget[1] << endl;
cout << matchedTarget[0] << endl;
cout << matchedSrcTgt << endl;
sorry für die < und >... ich weiß net wie ich die wegbekomme hier im editor!
2 Antworten
Die wird nicht übersprungen. cin liest den String in die *Name-Variablen ein und lässt dabei das Newline-Zeichen, das durch die ENTER-Taste ausgelöst wird, im Tastaturpuffer. Dann kommt getline() daher und denkt sich: 'Hey, cool, eine Eingabe. Die nehm' ich gleich mal mit.'
Du musst nach den cin-Befehlen den Tastaturpuffer leeren. Eine wirklich saubere, zuverlässige und portable Lösung ist leider keine ganz triviale Sache. Aber es sollte schon helfen, wenn du zwischen cin und getline() eine Dummy-Eingabe mit getline() einfügst, die das Newline-Zeichen abfängt, und dann erst dein 'richtiges' getline() benutzt.
string dummy;
cin >> sourceName;
getline(cin, dummy);
getline(cin, sourcePath);
Nicht besonders elegant, sollte aber theoretisch funktionieren.
Noch besser: ALLES restlos mit getline abhandeln! Was STÖRT denn daran, ein einzelnes Wort, welches man EH (!) mit einem Enter abschließt - messerscharf exakt genau so wie einen langen Satz - AUCH als nix anderes als Satz erstmal einzulesen und sich dann schlicht drüber zu freuen, daß da nur ein einzelnes Wort drin steht?!
KISS: Keep It Stupid Simple!
In diesem Fall: Mach nicht für jeden Furz ein extra Verfahren! Mach alles nach ein und demselben Schema F!
Es sei denn, dieses Schema F würde sich irgendwo als hinderlich erweisen. Aber HIER kann von HINDERLICH wohl unmöglich die Rede sein, oder?!
sorry. jetzt sind sie weg, die < und > ;)
Danke schonmal. Allerdings verstehe ich noch nicht ganz, wie du es meinst. Kannst du mal ein Beispiel Code hier einfügen??? wäre nett!