3

我现在正在学习 c++ 课程,我知道 for 循环会像这样工作,但我想知道它是“正常”还是“正确”

for (int i = 0; getline(cin, input); i++)

这应该是

int i = 0;
while (getline(cin, input))
    i++;

我只是想知道,因为我知道 for 循环应该是一个计数器循环,但这个循环的条件与 i 控制的次数无关。

4

6 回答 6

6

是的,for 循环的规则非常简单。只要你符合规则,语法可以是任何你想要的。

在两者中,只需选择您认为最易读的一个。

于 2012-05-02T22:08:13.817 回答
5

严格来说,没有“正确”的方式来编写for循环:可以将三个部分的任意组合留空(实际上,K&R 建议将三个部分都留空以实现“永远”循环),并且没有硬性具有停止条件的要求取决于循环计数器。

for循环优于循环的一个优点while是您可以continue在体内自由使用,而不必担心忘记增加计数器。这可能有助于具有大量嵌入式continue语句的循环的可读性。

于 2012-05-02T22:09:43.213 回答
3

很好,但就风格而言,我更喜欢while循环。

for 循环一般用于有界迭代,在这种情况下你可以提前知道迭代的次数,而 while 循环用于更一般的情况。

于 2012-05-02T22:10:13.793 回答
2

两者的工作方式相同。然而,这不仅仅关乎他们做了什么,还关乎如何让“人类”更容易理解代码。

您可以将您的源代码视为详细的文档,讨论如何执行特定任务。实际上如此详细,以至于即使是编译器,即愚蠢的机器,也可以理解它。换句话说,你为其他人编写代码,编译成机器代码是一个令人愉快的副作用。

考虑到这一点,以令人惊讶的方式使用句法结构并不是最好的主意。

于 2012-05-02T22:10:57.053 回答
1

他们都工作。

声明是大多数人会写的while方式,而且很容易理解。该for声明略短一些,但大多数人不得不看两次才能理解它在做什么。

于 2012-05-02T22:10:49.460 回答
1

虽然我通常不会认为for循环仅限于具有预先指定边界的计数循环,但我通常会认为它是increment循环的一部分直接参与循环完成的循环。

举个例子,我认为遍历一个链表是完全合理的,比如:

for (ptr = list_head; ptr != NULL; ptr = ptr->next)
    process(ptr->data);
于 2012-05-02T22:20:14.253 回答