如何在C中编写for循环

时间:2017-11-17 11:03:40

标签: c loops for-loop

为什么以下代码循环5000次而不是我期望的5次?

3

4 个答案:

答案 0 :(得分:3)

  

但是当我运行它时,它不会循环遍历循环5次,而是像5000这样。

那是因为heightfor循环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