我一直在做一些关于C ++作业的研究,并且遇到了针对我的任务的这种解决方案,实际上是一行代码。 (+初始化课程变量)。
for (; n != 0; n /= 10, ++count) {}
我的问题是,for循环开始处的分号是做什么的。我们从未与我们的教授讨论过。
在没有分号但仍使用for循环的情况下,该如何编写?答案 0 :(得分:4)
这是for循环原型
for(initialization;testExpression; updateStatement)
您只是说不需要初始化
答案 1 :(得分:1)
for
循环for(init; cond; step)
的任何部分都可以省略,如果不需要的话。例如,for(;;)
是C和C ++中一个非常惯用的“无限循环”构造。您在这里看到的是省略了“初始化”步骤。
答案 2 :(得分:1)
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
}
答案 3 :(得分:1)
C ++中的for关键字需要一定数量的参数。
for (initialization_statement; condition_statement; increment_statement) {}
如果您不想声明新变量或不影响现有变量的值,则可以省略初始化语句。
但是,您仍然必须编写第一个分号,以表明初始化语句将被忽略。