我不会在改变循环方面遇到错误

时间:2015-12-21 14:56:35

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

我正在尝试将此for循环转换为do while:

 for(i=1;i<=n;i++)
 {
 if(n%i==0)
   { cout<<"  "<<i;
     d++;
     s+=i;
   }
 i++
 }

我把它转换成了这个。但我没有得到正确的输出

 do
 {
   if(n%i==0)
   { cout<<"  "<<i;
     d++;
     s+=i;
   }
   i++;
 }
 while(i>n);
请告诉我我在哪里。

4 个答案:

答案 0 :(得分:3)

第二部分的循环应该是(i <= n)。此外,您需要初始化变量i(在looop的开头添加i = 1)。此外,您的第一个循环中的行;中缺少i++ - 另请注意,这是不必要的,因为您已经在for循环中递增i。在for循环结束时添加i++;会使i在每次迭代中递增两次。更正后的代码如下所示:

第一个循环(for):

for(i=1;i<=n;i++)
{
     if(n%i==0)
    { 
        cout<<"  "<<i;
        d++;
        s+=i;
    }
}

第二次循环(do-while):

i= 1;
do
{
    if(n%i==0)
    { 
        cout<<"  "<<i;
        d++;
        s+=i;
    }
    i++;
}
while(i<=n);

答案 1 :(得分:1)

您的do while循环需要以while (i < n)而不是while (i > n)结束。

答案 2 :(得分:1)

错误基本上在你声明i = 1的for循环中并且在do-while中你还没有声明主要的错误是你做错了条件检查do应该是(i<n) < / p>

答案 3 :(得分:1)

使用我的编辑看下面的代码:我得到每个循环的输出1 2 5 10,n任意设置为10.

    int i = 0;
    int n = 10;
    int d = 0;
    int s = 0;

for(i=1;i<=n;i++)
 {
 if(n%i==0)
   { 
     cout<<"  "<<i;
     d++;
     s+=i;
   }
 //i++; //commented this out. i already increments
 }

cout << endl;

    // reset variables for do while loop
    i = 1;
    n = 10;
    d = 0;
    s = 0;

do
 {
   if(n%i==0)
   { cout<<"  "<<i;
     d++;
     s+=i;
   }
   i++;
 }
 while(i<=n);  //changed condition