如何将循环写为For循环?

时间:2013-07-24 17:57:50

标签: c++ for-loop while-loop

我正在通过本网站推荐的“C ++ Primer 5th Edition”。我正在逐步完成For和While循环,并得出它们几乎相同的结论。至少那是我收集的。我认为有人解释它是最好的,当他们说“For循环是为了你知道要循环多少次,而循环是为了你想要循环直到条件满足。”但实质上,编译器不区分这两者,并且它们可以互换使用。

这本书提供了这段代码(它甚至不按照解释的方式工作):

<iostream>

int main()
{

int sum = 0, value = 0;
// read until end-of-file, calculating a running total of all values read

while (std::cin >> value)   {
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;

    }
}

所附练习说:“编写自己的程序版本,打印出的总和 从cin读取的一组整数。“我假设他们要我使用For循环。所以我尝试过这样做。虽然我很难过。

书中说“For循环由initstatement,condition和expression组成。在while循环中,”std :: cin&gt;&gt;值“是我的条件,没有表达。所以,如果我拥有的是一个初始化和条件,我应该如何使用for循环?

#include <iostream>


int main()

{
int sum = 0;

for (int value = 0; std::cin >> value; "EXPRESSION GOES HERE")
    sum += value;
std::cout << "The sum is: " << sum << std::endl;
return system("pause");
}

4 个答案:

答案 0 :(得分:4)

错误,您可以将while循环替换for替换为while(...)循环{/ 1}}。

for(;...;)

您发布的代码没有任何内容表明for (;std::cin >> value;) { } 循环。通常,当您真正想要计算某些内容或迭代一个集合时,您将使用for循环。你的意图只是循环,直到满足条件,所以几乎尖叫for,而不是while

我想如果我必须用for循环“正确”写这个,我可能会使用这样的东西:

for

尽管如此,我更有可能使用更加语义正确的int sum = 0; for (int i = 0; std::cin >> i; sum += i); // empty loop body std::cout << sum << std::endl; 循环。

答案 1 :(得分:1)

答案的重点在于你可以将for表达式的每个部分都留下来,例如:

for (;;) break;

是有效的代码。

另外,我建议将一本C ++书放在一边,在这种情况下回到C语言,因为两者的循环语义基础是相同的,而且C更简单。

编辑:您的问题的完整解决方案可能类似于:

#include <iostream>


int main()

{
int sum = 0;

for (int value = 0; std::cin >> value; sum+= value); 

// alternative version, a bit easier to read probably:
// for (int value = 0; std::cin >> value;) sum+= value;

std::cout << "The sum is: " << sum << std::endl;
return system("pause");
}

答案 2 :(得分:1)

while循环作为for

{
  int i = 0;
  while( i < limit){
         //do stuff
         i++;
   }
}

保持范围运算符在循环完成时删除迭代变量。

答案 3 :(得分:0)

有时代码看起来比一个而不是另一个更整洁。考虑两种情况;

std::vector<double> myVector;
typedef std::vector<double>::iterator dblIter;
dblIter curr = myVector.begin();
dblIter end = myVector.end();

while(curr != end)
{
    // do stuff
    ++curr;
}

或者

std::vector<double> myVector;
typedef std::vector<double>::iterator dblIter;

for(dblIter curr = myVector.begin(); curr != myVector.end(); ++curr)
{
    // do stuff
}

我碰巧更喜欢选项2,尽管评论说“当你知道迭代次数时使用”。我想这适用于一般规则。