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中编写for循环_C_Loops_For Loop - Fatal编程技术网

如何在C中编写for循环

如何在C中编写for循环,c,loops,for-loop,C,Loops,For Loop,为什么下面的代码循环5000次而不是我预期的5次 int height = 5; for (int height; height > 0; height -= 1){ printf('Something') } } 为什么必须在C中的for循环中重新定义变量 这可能是因为您希望在循环之后保留/使用变量的值 万一 int height = 5; for (int h = height; h > 0; h--){ printf('Something') } }

为什么下面的代码循环5000次而不是我预期的5次

int height = 5;

for (int height; height > 0; height -= 1){
    printf('Something')  }
}
为什么必须在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
循环后的值为零

为什么必须在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
循环后的值为零

这不是最初的重新定义

基本上,因为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`
    }

在此代码中,
h
的初始值是不确定的。它可能是5000或零,甚至超过2000000000!在使用变量之前,一定要给它赋值。

这不是重新定义最初的含义

基本上,因为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`
    }
在此代码中,
h
的初始值是不确定的。它可能是5000或零,甚至超过2000000000!在使用变量之前,始终为其赋值

但当我运行它时,它不会在循环中迭代5次,而是大约5000次

这是因为
for
循环中声明的
height
与外部声明的高度相同。你也是 有效地使用未初始化的
高度
,即

您可以省略声明以使用以前声明的值:

int height = 5;

for (; height > 0; height -= 1) {
    printf("Something");
}
如果不想更改高度,可以使用临时:

int height = 5;

for (int x = height; x > 0; x -= 1) {
    printf("Something");
}
这将使高度保持不变

还要注意,单引号中的值是多字节字符,不是字符串。因此,您不能将
'Something'
传递给
printf

但当我运行它时,它不会在循环中迭代5次,而是大约5000次

这是因为
for
循环中声明的
height
与外部声明的高度相同。你也是 有效地使用未初始化的
高度
,即

您可以省略声明以使用以前声明的值:

int height = 5;

for (; height > 0; height -= 1) {
    printf("Something");
}
如果不想更改高度,可以使用临时:

int height = 5;

for (int x = height; x > 0; x -= 1) {
    printf("Something");
}
这将使高度保持不变


还要注意,单引号中的值是多字节字符,不是字符串。因此,您不能将
'Something'
传递给
printf

,您必须在循环定义中使用用户输入重新定义
高度
变量

您可以这样做:

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

必须在循环定义中使用用户输入重新定义
高度
变量

您可以这样做:

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


只需完全删除循环内声明:
for(;height>0;height--)
就可以了。@TomKarzes;在某些情况下,您可能需要在外部范围中保留
height
的值。在这种情况下,您必须使用另一个变量进行循环。理解
for
的基本语法和子句可以清楚地说明这一点。另外,编写
--height
比编写
height-=1
更为惯用和可读。[插入关于不使用post inc/减量的强制性声明,除非您需要它们]像这样的一些问题在一分钟内有10张反对票。其他人(目前)有三票赞成的答案……只需删除循环内声明:
for(;height>0;height--)
就可以了。@TomKarzes;在某些情况下,您可能需要在外部范围中保留
height
的值。在这种情况下,您必须使用另一个变量进行循环。理解
for
的基本语法和子句可以清楚地说明这一点。另外,编写
--height
比编写
height-=1
更为惯用和可读。[插入关于不使用post inc/减量的强制性声明,除非您需要它们]像这样的一些问题在一分钟内有10张反对票。其他人(目前)有三票赞成的答案……当然,第一个
for
子句中的
height
没有任何效果,可能会让代码的读者认为你想做其他事情。在我看来,最好省略它。@下划线\u d;除此之外,早期的代码片段中几乎没有其他bug。在多次编辑之后,我已经修复了所有问题:)哦,我是指(高度;的
,现在是最后一段摘录-不知道我为什么说“第一”-但我明白你对其他人的意思P@TonyTannous;我猜有一个签入
for
循环,它确保
高度
不能低于
0
。当然,第一个
for
子句中的
高度
没有任何作用,可能会让代码的读者认为您是有意这样做的mething else.IMO最好省略它。@下划线\d;除此之外,早期代码段中几乎没有其他错误。经过多次编辑,我已经修复了所有错误:)哦,我是说(高度;
,现在在最后的摘录中-不确定我为什么说“first”-但我明白你对其他人的意思P@TonyTannous;我猜有一个检查
循环,它确保
高度
不能低于
0
@user694733我的坏。编辑时我头晕。@user694733我的坏。编辑时我头晕。酷酷的thx人:)不客气!酷thx男:)不客气!哦,当然。尽管如此,