简单的C ++ if else

时间:2015-02-02 18:41:56

标签: c++

我试图在文件中插入换行符,如果用户提供的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();
    }
}

2 个答案:

答案 0 :(得分:1)

代码正是您所做的。让我们大声朗读:

  

输入正确分为值时,请执行:

     
      
  • 如果acc等于accNum,请打印&#34;帐户已存在,请检查。&#34;,
  •   
  • 如果不是 - 添加帐户
  •   

也许你想要的是:

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

如果是这样的话,你当然应该使用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代码。

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

相关问题