简单的C++,否则
Simple C++ if else
我正在尝试在文件中插入换行符,如果用户提供的 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
,请打印"帐户已存在,请检查。- 如果没有 - 添加帐户
也许你想要的是:
- 当输入正确分隔为值时,请执行以下操作:
- 将所有
acc
存储在集合中。- 检查是否在集合中找到
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 代码。
现在的编写方式,在每行不匹配之后,它将输出新帐户。通过我建议的更改,我们首先浏览整个文件并查找帐户。如果没有找到,那么我们插入。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 除非重新绘制大小,否则SDL_Texture在调整大小后呈现黑色
- 为什么除非我使用 cout,否则我的值不正确?
- 键入特征以接收 T::value_type(如果存在),否则键入 T
- 除非使用某些寄存器,否则函数挂钩会崩溃
- 在数组中查找元素,如果找到则返回Find,否则返回not Find
- 否则在新程序中没有以前的 if 错误
- 如何检查输入是否为字符并显示它是"invalid input",否则它将按原样运行
- 遇到如果/否则的问题
- C++11:除非发布者休眠,否则发布者/使用者模式不会完成
- 对于循环否则,如果语句未求值
- 否则,如果语句无法正常运行
- 如果发生错误,则返回错误值,否则,继续执行函数
- 否则如果和大括号
- C++程序将进程置于前台(如果已在运行),否则创建一个新进程
- 不允许调用 gil 要求函数,否则 gil 编译错误与 C++
- C ++,否则文本程序不会进入我想要的途径