Не выполняется 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;
}

Ответы (0 шт):