Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么do中的整数(而数字>;10)会给出一个无止境的循环?_C_Loops_While Loop_Initialization_Int - Fatal编程技术网

C 为什么do中的整数(而数字>;10)会给出一个无止境的循环?

C 为什么do中的整数(而数字>;10)会给出一个无止境的循环?,c,loops,while-loop,initialization,int,C,Loops,While Loop,Initialization,Int,在我的理解中,while应该结束循环,因为 循环中的整数应该初始化为0。 还是我错了?但它给了我一个无止境的循环,打印零。 我用gcc编译它,并尝试用gdb调试它。 这对我来说毫无意义,while不能阻止循环 #include <stdio.h> #include <stdlib.h> int main() { int number = 20; do { int number = number / 2; print

在我的理解中,while应该结束循环,因为 循环中的整数应该初始化为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);
}
#包括
#包括
int main()
{
整数=20;
做
{
整数=数/2;
printf(“%d”,数字);
}而(数量>10个);
}

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

,因为您从不从功能范围更改编号。您在循环范围==>中创建了一个同名的新变量,删除
int number=number/2中的
int
。是的,我知道,当我删除int。。那就行了,但我想知道。。为什么“while”不能打破循环。。当它一直处于新初始化状态时。。应该是零。。所以当我们分手的时候。。。还是我错了?这可以帮助你理解“当它一直是新初始化的……它应该是零。”它从来没有初始化为零。您初始化为20,并且从不更改它。
int number=number/2调用未定义的行为,任何事情都可能发生。因此while使用“外部”数字?。。而内部数字在while?之前是看不到的。。所以,虽然只看到(数字(20)>10是真的)。。。但现在我看到了范围问题。。谢谢好的,内部数字只有在括号内的代码被执行时才有效。因此,当它达到while(数字>10)时;它已经不存在了。