c++ - 如何修复无限 while 循环?

标签 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(忽略这个), 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/

相关文章:

c++ - 标准 C++ 输入输出流如何处理 intXX_t 类型?

c++ - 如何获取类(不是对象)的引用/指针?

c++ - 无法打开输入文件 'opencv_calib3d243d.lib'

c# - 如何在 C++ 中读取 .proto 格式的二进制文件?

C++11 std::function const 重载歧义

C++:operator<< 嵌套类中的重载

c++ - 为什么 rundll 缺少条目?

c++ - 支持多线程添加、删除和迭代器的线程安全 C++ std::set

c++基本数组从初始化列表初始化

c++ - 跳过显式模板初始化以避免双重初始化