如何在C中编写for循环
为什么下面的代码循环5000次而不是我预期的5次如何在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') } }
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男:)不客气!哦,当然。尽管如此,