Не выполняется getline() в функции , игнорируется
Проблема такая что используя getline в функции printFile , чтобы считать с консоли в строку , а потом строку записать в файл,getline не срабатывает. Я написал отдельную функцию input0 , к которой обращаюсь из switch перед вызовом printFile, проблема повторяется. Тогда я вызвал input0 в самом начале программы , до switch, и тогда прога считала с консоли в строку и записала эту строку в конец моего файла. В чем проблема с getline?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void input0(string& str) {
cout << "Введите строку" << endl;
getline(cin, str);
}
void printFile(ofstream& fname, string& str){
if (!fname.is_open()) {
cout << "Ошибка! " << endl;
}
//string str;
/*cout << "Введите строку" << endl;
getline(cin,str);*/
fname << "Sokolov21" << endl;
fname << "Hello World777" << endl;
cout << "Типа записали, хз" << endl;
fname << str << endl;
fname.close();
}
void readFile(ifstream& fname0){
string str;
if (!fname0.is_open()) {
cout << "Ошибка! " << endl;
}
while (!fname0.eof()) {
getline(fname0,str);
cout << str << endl;
}
fname0 >> str;
cout << "" << endl;
cout << str << endl;
fname0.close();
}
int main() {
setlocale(LC_ALL,"Rus");
string str;
input0(str);
int n = -1;
// Меню пользователя
while (n != 0) {
cout << endl << "1 - Записать в файл" << endl <<
"2 - Прочитать из файла" << endl << endl <<
"3 - Добавить в начало" << endl <<
"4 - Поиск" << endl <<
"0 - Выход\nВыберите действие: ";
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
cin >> n;
while (cin.fail() || (n < 0) || (n > 8)) {
cin.clear();
cin.sync();
cout << "Ошибка ввода, выберите действие: ";
cin >> n;
}
switch (n)
{
case 1: {
ofstream fname("text0.txt");
printFile(fname,str);
break; }
case 2: {
ifstream fname0("text0.txt");
readFile(fname0);
break; }
case 3: {
break; }
case 4: {
break; }
}
}
system("pause");
return 0;
}