У меня проблема с моей программой на C++ ... Вся моя программа - это база данных для имен учащихся, классов и возрастов, и у меня есть проблема с функцией, когда пользователь хочет удалить данные за 1 студент. Вот код:C++ удаление строки текста в файле
void deletestudentdata()
{
string name, grade, tname;
int age, x=0; // x - "counter" to check if user entered wrong name
system("cls");
cout << "Enter name of the student you want to erase from database" << endl;
cin >> tname;
ifstream students("students.txt");
ofstream temp("temp.txt"); // temp file for input of every student except the one user wants to delete
while(students >> name >> grade >> age)
{
if(tname!=name){ // if there are students with different name, input their data into temp file
temp << name << ' ' << grade << ' ' << age << endl;
}
if(tname==name){ // if user entered correct name, x=1 for later output message that the user data has been deleted
x=1;
}
}
students.clear(); // clear eof and fail bits
students.seekg(0, ios::beg);
students.close();
temp.close();
remove("students.txt");
rename("temp.txt","students.txt");
if(x==0){ // x was set to 0 at start, so if it didn't change, it means user entered the wrong name
cout << "There is no student with name you entered." << endl;
}
else{ // x is not 0, it means user entered the correct name, print message that students data has been deleted
cout << "Student data has been deleted." << endl;
}
}
Он работает, но проблема в том, что я ввожу данные студентов и когда я хочу, чтобы удалить его с помощью этой функции не удаляет его, я сначала закрыть программу, а затем повторно запустите программу, а затем вызовите эту функцию, чтобы она удаляла данные учащихся.
Как я могу изменить его, чтобы удалить данные студентов сразу после ввода, без необходимости сначала закрыть программу?
Можете ли вы уточнить то, как вы его выполняете, например: «Я вводил данные о студентах», как? – Synxis
Я запустил его в VS2012. Не было никаких проблем. – shivakumar
Предположительно, вы сохраняете список имен учеников в другом месте во время запуска своей программы, а не только в файле, и вам также нужно удалить ученика. (Или очистите список и заполните его, когда вы скопируете имена.) –