Он не будет записывать в файл, потому что, как только вы закончите чтение файла с помощью getline (), будет установлен флаг eof.Вам нужно открыть файл, используя:
Myfile.open("Usernames_and_passwords.txt",fstream::in | fstream::out | fstream::app);
Это говорит программе, чтобы открыть файл для чтения и записи.fstream :: app сообщает программе добавить текст в конец файла.
Затем, чтобы выполнить сброс после нажатия eof, вы можете сделать
Myfile.clear();
Myfile.seekg(0, ios::beg);
. Это очистит флаг eof и переместит указатель назад в начало файла.После этого вы можете записать в файл.
Несколько других замечаний: ваш цикл нарушен: он не будет работать, если файл пуст, и будет записывать повторяющиеся имена пользователей, если введенное имя пользователя находится во второй строкевместо первого.
Вот модифицированная версия вашей функции:
void StartUp() { //VOID UPONSTARTUP (WHAT TO DO, ALSO READS DIFFRENT PROFILES AND PASSWORDS FOR LOGIN)
cout << "what profile should i load?" << "\n" << "profile name: ";
cin >> current_user_profile;
fstream Myfile;
Myfile.open("Usernames_and_passwords.txt",fstream::in | fstream::out | fstream::app);
if (Myfile.is_open()) {
while (getline (Myfile, username) ) {
if (username == current_user_profile) {
cout << "\n" << "Hello, " << username << "\n";
return;
}
}
cout << "wrong username or username unfortunately not found.\n";
cout << "shall i create a new profile? Yes/No: ";
cin >> newprofile;
if (newprofile == "Yes") {
cout << "new profile username: ";
cin >> makenewusername;
Myfile.clear();
Myfile.seekg(0, ios::beg);
Myfile << makenewusername << endl;
}
}
}
Я бы также предложил, чтобы StartUp возвращал логическое значение при успешном завершении операции, поэтому вы можете решить прекратитьпрограмма.Например, если пользователь ввел «Нет».