为什么以下代码循环5000次而不是我期望的5次?
3
答案 0 :(得分:3)
但是当我运行它时,它不会循环遍历循环5次,而是像5000这样。
那是因为height
在for
循环shadows中声明了在外面声明的那个。所以你是
有效地使用未初始化的height
,即potentially undefined behaviour。
您可以省略声明以使用先前声明的值:
int height = 5;
for (; height > 0; height -= 1) {
printf("Something");
}
如果您不想更改height
,可以使用临时:
int height = 5;
for (int x = height; x > 0; x -= 1) {
printf("Something");
}
会使height
保持不变。
另请注意,单引号中的值是多字节字符,而不是字符串。因此,您无法将'Something'
传递给printf
。
答案 1 :(得分:1)
为什么必须在C
中的for循环中重新定义变量
这可能是因为你想在循环之后保留/使用变量的值。
如果是
int height = 5;
for (int h = height; h > 0; h--){
printf('Something') }
}
height
的值为5
。在
int height = 5;
for (height; height > 0; height--){
printf('Something') }
}
在height
循环后, for
的值为零。
答案 2 :(得分:0)
这不是重新定义的原因。
基本上,因为C有范围,重新定义变量会隐藏外部范围内的所有变量:
for (int i=0; i<10; i++)
for (int i=0; i<10; i++) {
// Code that'll be looped 100 times
// Code here can't access the outer `i`
}
如果你不重新定义它
for (int i=0; i<10; i++){
for (; i<10; i++)
// Code that'll be looped 10 times
// Code that'll be run only once
}
如果定义变量而不初始化它:
for (int h; h>0; h--)
// Code that'll be looped for unknown times
在此代码中,h
的初始值为不确定。它可能是5000或零,甚至超过2,000,000,000!在使用变量之前,始终为变量赋值。
答案 3 :(得分:-1)
您必须在循环定义中使用用户输入重新定义height
变量。
你可以这样做:
int user_input;
scanf("%d", &user_input);
for (int height = user_input; height > 0; height -= 1){
printf("height = %d\n", height);
}
如果用户输入“5”,此代码将打印:
height = 5
height = 4
height = 3
height = 2
height = 1