【问题标题】:Variable used in loop condition not modified in loop body循环条件中使用的变量未在循环体中修改
【发布时间】:2018-07-13 04:53:09
【问题描述】:

我对 C 很陌生,但我只是想使用 for 循环从 int change 的值中减去 25,假设值已经大于 25。 我得到的错误信息是

“错误:循环条件中使用的变量'change'未在循环体中修改[-Werror,-Wfor-loop-analysis]”

这让我很困惑,因为我没有通过指定 change -25 来修改循环体中的变量“change”吗?

int main(void)
{
    float n;
    do
    {
        n = get_float("How much change do I owe you?: ");
    }
    while (n < 0);

    for (int change = n * 100; change >= 25; change - 25)
    {
        printf("%i", change);
    }
}

【问题讨论】:

  • change -= 25.
  • @UweKeim 稍微解释一下就是一个答案。你想做一个吗?
  • 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here?What do I do when someone answers my question?
  • 一些编译器可能会打印“没有任何副作用的表达式”之类的警告,因为该值仅被计算和丢弃。

标签: c debugging for-loop


【解决方案1】:

(作为of request,这里是my comment作为答案)

您的循环 for (int change = n * 100; change &gt;= 25; change - 25) 永远不会修改变量 change

您只需从变量change 的值中减去 25,返回结果并立即再次丢弃它。

所以不是

change - 25

使用

change -= 25

简称

change = change - 25

请参阅the Wikipedia page about the for loop 以了解有关语法的更多信息。

摘录:

for (initialization; condition; increment/decrement)
    statement

所以for循环中的第三部分应该是递增/递减。

【讨论】:

    【解决方案2】:

    如果您想要完成的是打印出使 n==0 所需的硬币数量,只需知道您当前正在打印循环的最终产品,即剩余部分。我知道这一点的唯一原因是因为我在学习 cs50 课程时犯了同样的错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 2014-11-09
      • 2017-08-03
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多