我试图在文件中插入换行符,如果用户提供的int尚未存档,如果是,则不应添加换行符。
如果acc == accNum
为真,则下面的代码不会添加新条目,但在else块中(用于添加新条目),会添加相同的多个条目。我最初将其他人移出while
,但仍然没有解决问题
while (fin >> acc >> first_name >> last_name >> bal){
if (acc == accNum){
cout << "Account already exist, please check." << endl;
fin.close();
} else {
ofstream fout("bank.txt", ios::app);
fout << accNum << " " << fname << " " << lname << " " << accBal << endl;
cout << "New Account Inserted." << endl;
fout.close();
}
}
答案 0 :(得分:1)
代码正是您所做的。让我们大声朗读:
输入正确分为值时,请执行:
- 如果
acc
等于accNum
,请打印&#34;帐户已存在,请检查。&#34;,- 如果不是 - 添加帐户
也许你想要的是:
- 输入正确分为值时,请执行以下操作:
- 将所有
acc
存储在一个集合中。- 检查集合中是否找到
醇>accNum
如果是这样的话,你当然应该使用C ++为你提供的一个类。在您目前的情况下,std::set
可能是最佳解决方案,因为它使您能够在逻辑时间内为add元素提供线性,摊销时间和search元素。
所以你的代码应该更像这样:
std::set<int> accounts; // Or any other type instead of int. I'm guessing a bit here
while (fin >> acc >> first_name >> last_name >> bal)
accounts.insert(acc);
if(accounts.count(accNum)
cout << "Account already exist, please check." << endl;
else{
// add the acc to the file
}
您还可以定义一个类来存储总帐户数据,这可能看起来像这样:
struct account{
int acc;
std::string first_name;
std::string last_name;
someType bal;
}
并将它们存储在std::vector
中。如果您想将记录存储在std::set
中,则需要为其operator<
重载,或者在constructor中提供自己的比较器功能。
然而,它可能看起来像针的努力,它应该使程序在完成后更具可读性。此外 - 您将在面向对象编程中获得一些实践,这就是C ++的用途。
答案 1 :(得分:0)
您可以使用while循环来读取数据,并在找到您要查找的内容时设置标记。在while循环之后,检查标志的状态,如果没有设置,请执行你拥有的else代码。
现在写入的方式,在每行不匹配后,它将输出新帐户。根据我建议的更改,我们首先浏览整个文件并查找帐户。如果没有找到,那么我们插入。