我在让代码抛出运行时错误以及让这些循环正常工作时遇到问题,我不确定原因。
如果用户要输入名称和余额,例如:josh 100,程序应在listAccounts vector中将名为josh的帐户添加100,然后打印新余额。
关于这一行的事情:for(; iter!= listAccounts.end(); iter ++){
由于某种原因,它导致if语句不起作用,如果我注释掉该行的功能,但只能使用listAccounts中的最后一个元素。 for循环是否有问题导致它不能逐步执行每个元素?
void Account::change_balance(string name, int balance, int i) {
try {
auto iter = listAccounts.begin();
for ( ; iter != listAccounts.end(); iter++) {
if ((*iter).account_name == name) {
if (((*iter).account_type == 0) && (((*iter).account_balance +
balance) < 0)) {
throw runtime_error("account cannot hold negative
balance");
(*iter).account_balance = (((*iter).account_balance) -
(balance));
cout << (*iter).account_balance;
} else {
(*iter).account_balance = balance +
(*iter).account_balance;
cout << (*iter).account_balance;
}
}
}
}
catch (runtime_error& e) {
cout << "error on line " << i << ": " << e.what() << "\n";
}
}
我无法弄清楚我哪里出错了,任何迹象都会非常感激。感谢。
答案 0 :(得分:0)
检查你的内部for循环。你永远不会增加迭代器,你所做的就是将listAccounts.size()与vector参数的相同元素进行比较。当循环在k == listAccounts.size()时结束,条件n == listAccounts.size()只能在外循环至少进行另一次运行时才能满足,因为你没有清除n(或在本地定义它) )。但现在,它可能会触发并说“帐户未找到”,即使它存在,因为n == listAccounts.size()。这不是你想要的行为。
您应该重新考虑您的算法。每次遍历帐户列表时,为什么要遍历所有帐户?这样做一次就足够了。考虑做这样的事情:
for(auto& account : listAccounts) {
if(account.account_name == name) {
// do your logic stuff and eventually:
return;
}
}
// if your program gets here, no account with such a name was found