简单的C++,否则

Simple C++ if else

本文关键字:否则 C++ 简单      更新时间:2023-10-16

我正在尝试在文件中插入换行符,如果用户提供的 int 尚未存档,如果是,则不应添加换行符。

如果 acc == accNum true,下面的代码不会添加新条目,但在 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();
    }
}

代码完全按照您的要求执行。 让我们大声朗读:

当输入正确分隔为值时,请执行以下操作:

  • 如果acc等于accNum,请打印"帐户已存在,请检查。
  • 如果没有 - 添加帐户

也许你想要的是:

  1. 当输入正确分隔为值时,请执行以下操作:
    • 将所有acc存储在集合中。
  2. 检查是否在集合中找到accNum

如果是这种情况,您当然应该使用C++为您提供的类之一。在您目前的情况下,std::set可能是最好的解决方案,因为它使您能够在线性摊销时间内添加元素并以对数时间搜索它们。

所以你的代码应该更像这样:

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<,或者在构造函数中提供你自己的比较器函数。

然而,这看起来像是针头的努力,当你完成它时,它应该使程序更具可读性。另外 - 您将在面向对象编程中获得一些练习,这就是C++的用途。

您可以使用 while 循环来读取数据,并在找到您要查找的内容时设置一个标志。在 while 循环之后,检查标志的状态,如果未设置,请执行您拥有的 else 代码。

现在的编写方式,在每行不匹配之后,它将输出新帐户。通过我建议的更改,我们首先浏览整个文件并查找帐户。如果没有找到,那么我们插入。