C++ 如何将这个While循环编写为For循环?

C++ 如何将这个While循环编写为For循环?,c++,for-loop,while-loop,C++,For Loop,While Loop,我正在阅读本网站推荐的“C++入门第五版”。我逐步通过For和While循环,得出结论,它们实际上是相同的。至少这是我收集到的。我认为有人解释得最好,他们说“For循环是指当你知道你想循环多少次,而while循环是指当你想循环多少次,直到满足一个条件。”但本质上,编译器没有区分这两者,它们可以互换使用 这本书介绍了这段代码(它甚至不能像作者解释的那样工作): int main() { 整数和=0,值=0; //读取到文件末尾,计算读取的所有值的运行总数 而(标准::cin>>值){ sum+=

我正在阅读本网站推荐的“C++入门第五版”。我逐步通过For和While循环,得出结论,它们实际上是相同的。至少这是我收集到的。我认为有人解释得最好,他们说“For循环是指当你知道你想循环多少次,而while循环是指当你想循环多少次,直到满足一个条件。”但本质上,编译器没有区分这两者,它们可以互换使用

这本书介绍了这段代码(它甚至不能像作者解释的那样工作):


int main()
{
整数和=0,值=0;
//读取到文件末尾,计算读取的所有值的运行总数
而(标准::cin>>值){
sum+=value;//相当于sum=sum+value

std::coutErr,您可以将
while(…)
替换为
for(;…)
,将任何
while
循环编写为
for
循环

for (;std::cin >> value;)   {

}
但是,您发布的代码中没有任何内容建议使用
for
循环。通常,当您实际想要计算某个数字或迭代某个集合时,您会使用for循环。您的目的只是循环直到满足某个条件,因此在
时,几乎会发出
尖叫,而不是
for

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

int sum = 0;
for (int i = 0; std::cin >> i; sum += i); // empty loop body
std::cout << sum << std::endl;
int和=0;
for(int i=0;std::cin>>i;sum+=i);//空循环体

答案中重要的一点是,你可以把表达式的每一部分都省略掉,例如

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");
}
#包括
int main()
{
整数和=0;
for(int值=0;std::cin>>值;sum+=value);
//备选版本,可能更容易阅读:
//对于(int value=0;std::cin>>value;)sum+=value;
std::coutwhile循环作为for

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

保持循环操作符在循环完成时将迭代变量剔除。

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

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 myVector;
typedef std::vector::迭代器dbl;
dbl curr=myVector.begin();
dbl end=myVector.end();
while(curr!=结束)
{
//做事
++咖喱;
}

std::vector myVector;
typedef std::vector::迭代器dbl;
对于(dbl curr=myVector.begin();curr!=myVector.end();++curr)
{
//做事
}

我碰巧更喜欢选项2,尽管有评论说“当您知道迭代次数时使用”。我想这是一个普遍的规则。

请记住,
for表达式的任何部分都可以为空。旁注:练习是为了循环,我们知道迭代次数时使用,而我们更喜欢在特定条件下使用中断。@Grijesh:不,for循环是指有“初始化”、“条件”和“更新”的循环你在每个循环中需要的步骤。例如,一个链表可以用
for(T*p=head;p;p=p->next)迭代。
-我们不知道多少乘以一些计数,只是当它达到零时就完成了。将一个数除以它的位数可以像
for(int x=n;x;x/=10)那样完成…
等。如果您想知道为什么提供的示例无法正常工作:
返回0;
在while循环中。有明显错误的示例?不太好。哦,好吧。我想我只限于使用“for(initstatement,condition,expression)”格式。谢谢!是的,但是这三个部分中的任何一个都可以是空的。
for(;;)
是写“永远”的常用方法循环从未终止,直到循环中的某个部分调用
中断
返回
抛出
。我的意思是我认为我必须使用这三个部分。这本书没有具体说明我是否可以省略部分。现在我明白了。
{
  int i = 0;
  while( i < limit){
         //do stuff
         i++;
   }
}
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
}