我想删除我的txt文件中的一行
student courses
s111 cs214
s222 cs112
s333 cs218
我想从中删除第2行,即s222 cs112,我试图使用此getline代码,但没有删除一行。.它保留了用户输入的行,并删除了其余的行[note:user输入一个与它执行的数组相等的输入]] ...这是我删除文本行的代码
string course;
string stud;
int i = 0;
cout << "PLease enter course to delete" << endl;
cin >> stud;
while (stud != registration_details[i].get_id()) {
fstream ofs;
ofs.open("Registration.txt", ios::out | ios::trunc);
ofs << registration_details[i].get_id() << registration_details[i].get_course();
ofs.close();
i++;
}
但是在输入[stud]中输入cs222之后,这就是我的文件发生的情况。
student courses
s111 cs214
我要删除的输入将删除,但与此同时,它也删除了第三部分,即s333 请帮助
答案 0 :(得分:1)
看看循环的作用。它遍历registration_details
数组,直到找到要删除的元素。在循环内,它将删除该文件,并将其替换为包含数组当前元素的单个行文件。因此,除非您告诉它删除第一行(在这种情况下它将不执行任何操作),否则它将用仅包含您要删除的行之前的行的单行替换文件。
您需要先打开文件(循环之前),然后循环遍历数组中的所有元素(因此,在找到要删除的行时不要停止)。对于不是要删除的条目的每个条目,都需要将其写出。
答案 1 :(得分:0)
条件为假时,我们使用的while
循环将退出。在您的情况下,就是找到匹配项。因此,应用程序将不会在此之后打印下一组行。
您可以做的是:
if
条件并continue
行
匹配的请参阅下面的示例代码
fstream ofs;
ofs.open("Registration.txt", ios::out | ios::trunc);
for ( const auto& oLineDetails : registration_details )
{
if ( stud == oLineDetails.get_id() )
{
continue;
}
ofs << oLineDetails.get_id() << oLineDetails.get_course();
}
ofs.close();
答案 2 :(得分:0)
您的代码中有两个错误:
1. while条件,如果为false(即当stud为匹配项时)将退出
2.为每个记录打开和截断文件
什么是registration_details?它是向量还是数组?我将首先使用std :: vector的size()
或C语言风格的数组的sizeof(registration_details) / sizeof(registration_details[0])
来获取其大小,并将其存储为可变大小。然后,我将执行以下操作:
fstream ofs;
ofs.open("Registration.txt", ios::out | ios::trunc);
for (size_t i=0; i < size; ++i)
{
if (stud != registration_details[i].get_id())
{
ofs << registration_details[i].get_id() << " " << registration_details[i].get_course() << std::endl;
}
}
ofs.close();