这个问题在这里已有答案:
我一直在用C ++做我的家庭作业研究,我遇到了这个解决方案,我的任务就是一行代码。 (+初始化变量)。
for (; n != 0; n /= 10, ++count) {}
我的问题是,for循环开头的分号是做什么的。我们从未向教授讲过这一点。有没有一种不同的方式可以写出这可能没有分号但仍然使用for循环?
这是for循环原型
for(initialization;testExpression; updateStatement)
你只是说不需要初始化
如果不需要,可以省略for
loop for(init; cond; step)
的任何部分。例如,for(;;)
是C和C ++中非常惯用的“无限循环”结构。你在这里看到的是被遗漏的“初始化”步骤。
C ++中的for关键字需要一定数量的参数。
for (initialization_statement; condition_statement; increment_statement) {}
如果您不希望声明新变量或影响现有变量的值,则可以省略初始化语句。
但是,您仍然必须编写第一个分号,以指示要忽略initialization_statement。
for循环的结构是,
for (initialization; condition; increment/decrement) {
statements;
}
所以你已经在for循环之外完成了初始化,所以你必须跳过那部分并进行条件检查!
Is there a different way in how this could've been written perhaps without a semicolon but still using a for loop?
如果你想消除分号并使用for
循环,答案是否定的。分号是将语句与initialisation
或condition
或increment/decrement
分开的内容。没有分号,它将第一个语句作为initialisation
。
例:
以下代码适用于循环。
for (i = 0; i < 10; i++) {
printf("%d", i);
}
它可以改写成,
i = 0; // initialisation
for (; i < 10; i++) {
printf("%d", i);
}
在上面的代码中,我们在i = 0
循环之外初始化了for
,所以现在我们不必在for循环的初始化部分做任何事情。因此,为了跳过它,并转向条件声明,我们添加了;
。
通过删除increment/decrement
步骤再次可以最小化,
i = 0; // initialisation
for (; i < 10;) {
printf("%d", i);
i = i + 1; // increment
}
正如Aconcagua在评论中所提到的,for
循环的最终最小版本可能如下所示,
i = 0; // initialisation
for (; ;) {
if(i >= 10) { // condition
break;
}
printf("%d", i);
i = i + 1; // increment
}