[英]How do I fix a infinite while loop?
我有一个使用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,费用(忽略此信息),数据限制和起始数据
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循环无限循环,我不明白为什么会这样,因为我要求一个新字符和一个新double。
编辑6:
好的,它实际上仍然无法正常工作,但是我的while语句中的错误已暴露出来,我想比较account_number和line_account,这是我使用错误的变量名的错。
所以当我使用其中一种解决方案时
while(account_number != line_account && transaction_char != 'X' && data_change != -1)
它不会进入循环,因为它始终为假,并跳过其余数字
我的while循环正在测试这条线
951482 X ‐1
其中line_account号与我的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))
{
:
:
}
我猜测
while (!(account_number == line_number && transaction_char == 'X' && data_change == -1))
应该
while (account_number != line_number || transaction_char != 'X' || data_change != -1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.