【问题标题】:Why am I Stuck in a Loop?为什么我被困在一个循环中?
【发布时间】:2015-02-01 21:27:17
【问题描述】:

我编辑了这个问题,以准确地表达我的要求,并清楚地表明我的错误。这个问题已经回答了。

为什么我会陷入死循环?我尝试了一些不同的技术,例如在 if 语句中引入一个 break 语句,甚至只是在其中抛​​出一个 break 语句。但是我仍然陷入困境。

    while (recalculate = 1){

        cout << "\nEnter in the radius of the sphere: ";
        cin >> radius;
        cout << "\nEnter in the weight of the sphere: ";
        cin >> weight;
        cout << "\n";

        if (bForce > weight)
        {
            cout << "\nEgads, it floats!\n";
        }
        else {
            cout << "\nIt sunk...\n";
        }

        cout << "\nRecalculate? (1 = yes, 0 = exit)\n";
        cin >> recalculate;
        // See what recalculate really is. 
        cout << "\n" << recalculate;

    }

【问题讨论】:

  • 因为你正在分配变量recalculate = 1更改为recalculate == 1
  • 打开你的编译器警告!!!
  • 这已经被回答了。我编辑了这个问题,使它不是一团糟。我确实有编译器警告,但这是一个逻辑错误。 while循环继续将我的变量分配给1,而不是比较它,并且无论如何都继续一遍又一遍地循环。

标签: c++ loops if-statement while-loop


【解决方案1】:

while(recalculate=1) 总是被评估为真,因为 1 被分配给 recalculate 并且任何不同于零的数值都被隐式转换为布尔值 true。要测试是否相等,请使用==,即

while(recalculate == 1)

【讨论】:

  • 呃,我全忘了。非常感谢。这正是我的问题。
  • @Zachary 尝试在您构建代码时启用所有编译器警告。例如,使用 g++ -Wall 编译会给您:warning: suggest parentheses around assignment used as truth value [-Wparentheses] 并且不要忽略警告,除非您真的确定它们是无害的(它们很少是)
【解决方案2】:

问题在于= 是一个赋值,而不是一个比较:

if (recalculate = 0) {

上面将recalculate 设置为零,然后将其计算为布尔表达式。为零时,它的计算结果始终为 false,因此永远不会执行 if 的主体。

比较的正确写法是==:

if (recalculate == 0) {

【讨论】:

  • 非常感谢。我忘了比较运算符是 ==
猜你喜欢
  • 2022-01-26
  • 2019-08-20
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多