我有一个函数使用 while 循环来接收表单中的多个输入。
功能比较
id,C 表示添加或 D 表示删除,以及添加/删除的数量
951482 C 5.250
951482 D 15.111
951482 C 29.628
951482 D 10.200
951482 D 3.175
951482 X -1
该函数将这些行与其他地方接收到的输入进行比较
id, charge(忽略这个), limit of data, and starting data
951482 6.25 50 35.733
对起始数据进行更改
最后一行是循环的结尾
我现在有
void read_and_total (bool& any_errors, double& starting_disk_usage,
double& max_disk_usage, double& end_disk_usage,
int& account_number)
{
int line_account;
double data_change;
char transaction_char;
int line_number = 2;
end_disk_usage = starting_disk_usage;
max_disk_usage = starting_disk_usage;
cin >> line_account >> transaction_char >> data_change;
any_errors = false;
while (account_number != line_account && transaction_char != 'X' && data_change != -1)
{
cout << line_account << ' ' << transaction_char << ' ' << data_change << endl;
if (transaction_char == 'D')
end_disk_usage = end_disk_usage - data_change;
if (transaction_char == 'C')
end_disk_usage = end_disk_usage + data_change;
if (max_disk_usage < end_disk_usage)
max_disk_usage = end_disk_usage;
//Error proccessing
if (transaction_char != 'C' && transaction_char != 'D' &&
transaction_char != 'X')
{
cout << "Error in line #" << line_number << " - "
<< "invalid transaction code" << ' ' << transaction_char
<< ' ' << endl;
any_errors = true;
}
if (data_change < 0)
{
cout << "Error in line #" << line_number << " - "
<< "invalid transaction amount " << data_change << endl;
any_errors = true;
}
if (line_account != account_number) {
cout << "Error in line #" << line_number << " - "
<< " non‐matching account number" << line_account
<< endl;
any_errors = true;
}
cout << "Bottom of function" << endl;
cin >> line_account >> transaction_char >> data_change;
}
return;
}
由于控制变量未更新,我的 while 循环无限循环,我不明白为什么会这样,因为我要求一个新角色和新替身。
编辑 6:
好吧,它实际上仍然不起作用,但是我的 while 语句中的错误已经暴露出来我想比较 account_number 和 line_account,这是我使用错误变量名的错。
所以当我使用其中一种解决方案时
while(account_number != line_account && transaction_char != 'X' && data_change != -1)
它不会进入循环,因为它始终为 false,并跳过其余的数字
我的 while 循环正在测试这一行
951482 X ‐1
其中 line_account number 与我的 account_number 相同 字符是 X 并且值正好是-1
当我删除对 account_number 的检查时,它可以工作,但添加它后,它总是无法进入循环。
编辑 4:
我在顶部添加了有关该问题的其他信息
我希望我的 while 循环在我的数据末尾检查这一行
951482 X-1
所有三个值都必须正确, 帐号应与标题相同 字符应该是 x 并且该值必须是 -1 而不是任何其他负值。
编辑 3:
我现在将我的 while 语句更改为
while (!(account_number == line_number && transaction_char == 'X' && data_change == -1))
我相信这是我的问题的根源,我试图让所有三个条件都为真以结束循环。
编辑 2:
添加 2 个测试输出后,生成的消息是
的重复Bottom of function
951482 X 0.000000
我不确定为什么 -1 被设置为 0.00000
编辑:
如果在 while 循环的末尾包含一个测试语句,它会导致无限打印语句。我想我的 while 循环条件有问题。
最佳答案
如何将您的 while()
语句更改为:
while(account_number != line_number && transaction_char != 'X' && data_change != -1))
{
:
:
}
关于c++ - 如何修复无限 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40538983/