【问题标题】:Why does an int number in do (while number > 10) gives an endless loop?为什么 do (while number > 10) 中的 int 数会产生无限循环?
【发布时间】:2018-01-18 08:15:05
【问题描述】:

在我的理解中,while 应该结束循环,因为 int number "in" 循环应该用 0 初始化它。 还是我错了?但它给了我一个无限循环,打印零。 我用 gcc 编译它并尝试用 gdb 调试它。 对我来说,while 不会停止循环,这对我来说毫无意义。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int number = 20;
    do
    {
        int number = number / 2;
        printf("%d ", number);
    } while (number > 10);
}

【问题讨论】:

  • 因为您永远不会从函数范围更改number。您在循环范围内创建了一个同名的新变量 ==> 删除 int number = number / 2; 中的 int
  • 是的,我知道,当我删除 int .. 然后它工作,但我想知道,.. 为什么“while”不会打破循环.. 当它一直新初始化时。 . 它应该是零.. 所以 while 应该打破......还是我错了?
  • 这可以帮助你理解godbolt.org/g/UL9Wd3
  • "当它一直新初始化时......它应该是零。"它永远不会初始化为零。您初始化为 20 并且永远不会更改它。
  • int number = number / 2; 调用未定义的行为,任何事情都可能发生。

标签: c loops while-loop initialization int


【解决方案1】:

您每次在循环中创建新的number,仅在循环内可见,与循环外的无关。删除int number = number / 2;中的int

【讨论】:

  • 所以 while 使用“外部”数字?.. 而内部数字从未被 while 看到? ..所以虽然只看到(数字(即20)> 10是TRUE)? ...但现在我看到了范围问题..谢谢!
  • 好吧,内部数字只有在括号内的代码被执行时才存在。所以当它达到 while (number > 10);它甚至不存在了。
猜你喜欢
  • 1970-01-01
  • 2013-03-29
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多