中的多个语句
Multiple statements in for
我有这个代码
for(int l = 1 ; l <= c ; l++, Sleep(500*min(l, 8))) //... <= 4000 msec
{
....
}
这等于这个吗?
for(int l = 1 ; l <= c ; l++) //... <= 4000 msec
{
Sleep(500*min(l, 8))
....
}
我想用 C# 重写原始代码。第二种方法与我将在 C# 中采用的方法相同吗?
不,它们不等同。for
循环的停止条件在以下{ }
块中的代码之后执行。
所以等价是
for(int l = 1; l <= c; )
{
/*loop body*/
l++, Sleep(500 * min(l, 8));
}
表达式分隔符运算符 (,
) 可以替换为语句终止符 ;
。由于两者都是排序点,因此Sleep
接收递增的值 l
。
它们不是等价的,因为for
循环的第三部分在每个循环的末尾执行。根据文档,这是for
循环的语法。
for (initializer; condition; iterator) {
body
}
哪里
迭代器部分定义每次迭代后会发生什么 循环的主体。
在原始情况下,l++
发生在Sleep
之前,所以这是等效的代码:
for(int l = 1 ; l <= c ; l++) //... <= 4000 msec
{
......
Sleep(500*min(l+1, 8)) // note the +1
}
不完全是,代码等效于
for(int l = 1 ; l <= c;) //... <= 4000 msec
{
// loop body goes here
...
// statements from the last part of the for(...;...;...) statement are executed at the end of the loop
l++;
Sleep(500*min(l, 8));
}
No.您的原始代码等效于
{
int l = 1 ;
while( l <= c)
{
....
l++, Sleep(500*min(l, 8)); //... <= 4000 msec
}
}
而修改后的版本是
{
int l = 1 ;
while( l <= c) //... <= 4000 msec
{
Sleep(500*min(l, 8));
....
l++;
}
}
如您所见,l
在用于计算Sleep()
时间之后递增,而不是像最初那样在之前递增。此外,Sleep()
是在执行循环体的主要部分之前调用的,而不是在执行之后。
for(int l = 0 ; l <= c ; l++, Sleep(500*min(l, 8))) //... <= 4000 msec
{
....
}
请注意将int l = 1
更改为int l = 0
,因为您将领先一个计数,因此您必须通过减少一个计数来计算它。所以我l
0
<</p>
一个有趣的选择:
for(int l = 2 ; l <= c+1; l++) //... <= 4000 msec
{
// ...
Sleep(500*min(l, 8))
}
与 Gabriel 的答案类似,但+ 1
被移动到边界检查,使其余部分看起来相同。(在将代码添加到l
以弥补"错过"增量时,代码感觉可疑)。
由于问题还与将代码移植到 C# 有关,因此下面是相关信息。尽管您的两个代码示例并不等效,但它们都直接转换为 C# 代码(当然,C# 等效于 Sleep
)。对于 C#,文档中发现的更复杂的示例清楚地表明,当 for
循环的迭代器部分包含多个表达式时,它们将从左到右计算。在C++中,内置逗号运算符还计算从左到右的计算(请参阅此处的"内置逗号运算符"下)。
我认为这里有一些关于C#"for"循环的混淆 - C#确实允许与原始(C++?)代码相同类型的"for"循环(即第三部分中的多个语句):
for (int l = 1; l <= c; l++, System.Threading.Thread.Sleep(500 * Math.Min(l, 8)))
{
//....
}
如果你想有另一种写法 - 即使上面的"for"循环有效:
int l = 1;
while (l <= c)
{
//....
l += 1;
System.Threading.Thread.Sleep(500 * Math.Min(l, 8));
}
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- c++:定义if语句中的模板
- 主线的等价语句是什么