Frage von BotMaster3000, 28

c++: getline() funktioniert nicht/wird übersprungen?

Hallo,

ich habe ein kleines Programm zu Testzwecken geschrieben, das Dateien löschen, erstellen, umbenennen und editieren kann.

Beim letzten gibt es ein für mich unverständliches Problem:

 void editFile()
{
std::cout << "Enter the filename you want to change: ";
std::string filename;
std::cin >> filename;

std::cout << "Enter text you want to be stored in the Textfile: \n";
std::string text;
std::getline(std::cin, text);

std::fstream file;
file.open(filename.c_str(), std::ios::out);
file << text;
file.close();

std::cout << "File got successfully edited.";

main();
}

Ich weiß nicht, ob ihr es schon seht, aber bei dem 2. kasten,

std::cout &lt;&lt; "Enter text you want to be stored in the Textfile: \n";
std::string text;
std::getline(std::cin, text);

bei der Funktion std::getline(std::cin,text); , den Teil überspringt er einfach, wenn ich den Code ausführe.. . Ich habe das Gefühl, als ob das am ersten Kasten liegt, und dass er damit irgendwie nicht klarkommt, aber ich weiß es nicht genau.. .

Ich hoffe ihr könnt mir weiterhelfen.

Ich benutzte Microsoft Visual Studio Community 2015 und Windows 7.

MfG BotMaster3000

Antwort
von J0T4T4, 18

Nach dem std::cin >> filename; bleibt noch das Enter zum Bestätitigen im Input-Buffer, und wird so mit getline() dem std::string 'text' zugewiesen. Um das zu umgehen kannst Du:

A) nicht std::cin sondern gleich 'getline()' verwenden oder

B) den Buffer vorher mit std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n') [von <limits>] von allen Zeilenumbrüchen bereinigen

Kommentar von BotMaster3000 ,

Cool, danke.

Die erste Option hat irgendwie nicht funktioniert aber die 2. schon, danke.

MfG BotMaster3000

Keine passende Antwort gefunden?

Fragen Sie die Community