繁体   English   中英

如何修复无限while循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM