为什么在这个循环中需要一个分号? [重复]

问题描述 投票:3回答:4

这个问题在这里已有答案:

我一直在用C ++做我的家庭作业研究,我遇到了这个解决方案,我的任务就是一行代码。 (+初始化变量)。

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

我的问题是,for循环开头的分号是做什么的。我们从未向教授讲过这一点。有没有一种不同的方式可以写出这可能没有分号但仍然使用for循环?

c++
4个回答
4
投票

这是for循环原型

for(initialization;testExpression; updateStatement)

你只是说不需要初始化


1
投票

如果不需要,可以省略for loop for(init; cond; step)的任何部分。例如,for(;;)是C和C ++中非常惯用的“无限循环”结构。你在这里看到的是被遗漏的“初始化”步骤。


1
投票

C ++中的for关键字需要一定数量的参数。

for (initialization_statement; condition_statement; increment_statement) {}

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

但是,您仍然必须编写第一个分号,以指示要忽略initialization_statement。


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
}

© www.soinside.com 2019 - 2024. All rights reserved.