如何修复无限循环?

时间:2016-11-10 23:45:08

标签: c++ c++11

我有一个函数,它使用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(忽略此),数据限制和启动数据

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编号与我的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循环条件有问题。

2 个答案:

答案 0 :(得分:1)

如何将while()语句更改为:

while(account_number != line_number && transaction_char != 'X' && data_change != -1))
{
  :
  :
}

答案 1 :(得分:0)

我怀疑

while (!(account_number == line_number && transaction_char == 'X' && data_change == -1))

应该是

while (account_number != line_number || transaction_char != 'X' || data_change != -1)