为什么在此循环中需要分号?

时间:2019-02-21 14:26:20

标签: c++

我一直在做一些关于C ++作业的研究,并且遇到了针对我的任务的这种解决方案,实际上是一行代码。 (+初始化课程变量)。

for (; n != 0; n /= 10, ++count) {}

我的问题是,for循环开始处的分号是做什么的。我们从未与我们的教授讨论过。

在没有分号但仍使用for循环的情况下,该如何编写?

4 个答案:

答案 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循环,则答案为。用分号分隔语句与initialisationconditionincrement/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) {}

如果您不想声明新变量或不影响现有变量的值,则可以省略初始化语句。

但是,您仍然必须编写第一个分号,以表明初始化语句将被忽略。