我正在从文本文件中删除一行,方法是将除用户指定要删除的一行之外的每一行复制到一个新的文本文件(temp.txt),然后删除原始文本文件(staffMembers.txt)并将temp.txt重命名为staffMembers.txt。
staffMembers.txt的内容如下:
将staffMembers.txt的内容复制到temp.txt时,如下所示:
有人能解释一下我如何防止在文本文件末尾创建新行吗?我的代码如下:
void deleteStaffMember()
{
outStream.open("temp.txt", ios::app);
if(outStream.fail())
{
cout << "Unable to open temp.txt.\n";
exit(1);
}
inStream.open("staffMembers.txt");
if(inStream.fail())
{
cout << "Unable to open staffMembers.txt.\n";
exit(1);
}
else
{
cout << endl << "Please enter a staff members ID to delete: ";
cin >> deleteLine;
while(getline(inStream, line))
{
string firstCharacter;
firstCharacter += line[0];
if (firstCharacter != deleteLine)
{
outStream << line << endl;
}
else
{
inStream.close();
outStream.close();
cout << "Error. Unable to find staff member.\n" << endl;
break;
}
}
}
inStream.close();
outStream.close();
remove("staffMembers.txt");
rename("temp.txt", "staffMembers.txt");
cout << "The staff member has been deleted successfully.\n" << endl;
system("pause");
system("cls");
}
我无法从***outStream〈〈line〈〈endl;中删除***endl******因为temp.txt格式如下:
4条答案
按热度按时间fdbelqdn1#
使用载体的清洁剂溶液
plicqrtu2#
只要稍微改变一下逻辑,就像这样:
这样我们在每行之前打印新行,除了第一行。
bksxznpy3#
代码:
很可能就是罪魁祸首。
它输出行,然后添加"\n",这是"endl"所做的事情之一。
考虑'line'是空字符串或几乎是空字符串的情况。
如果您使用以下代码,这种行为将变得相当明显:
最后,决定如何迎合最后一行。yngum的回答非常好,我建议理解他的代码。
(Hint:"\n"实际上并不表示"行尾",它可以解释为"行分隔符"、"新行开始"或"行尾"中的任何一个)
ar7v8xwq4#
只需添加这是if语句