迭代计数器不递增

时间:2014-08-18 15:15:12

标签: c++

我用c ++编写了一个程序来打印所有素数高达100,但它只是写"hello world",然后挂起。那是为什么?

#include <iostream>

bool is_prime(int num)
{
    if(num == 1)
    {
        return false;
    }
    for(int i = 2; i < num; i++)
    {
        if(num % i == 0)
        {
            return false;
        }
    }
    return true;
}

int increase(int i)
{
    return i++;
}

int main()
{
    std::cout << "hello world!!" << std::endl;
    int i = 1;
    while(i < 100)
    {
        i = increase(i);
        if(is_prime(i))
        {
            std::cout << i << " is prime" << std::endl;
        }
    }
}

7 个答案:

答案 0 :(得分:22)

return i++;此语句将返回i的原始值,而不是递增的值。

您需要return ++i;return i + 1 (感谢@interjay指出)。后来的return i + 1;清楚地表明只有返回值很重要,而不是i的新值。

下一行(或使用i++可以看到后期增量i的效果。

不确定,如果您需要一个单独的方法来增加变量i,您可以在while循环中执行此操作。

 while(i < 100)
    {

        if(is_prime(i))
        {
            std::cout << i << " is prime" << std::endl;
        }
        i++;
    }

您还可以使用for循环,而不是while,因为您正在使用一系列值。

for(i = 1; i < 100; i++)
{
    if(is_prime(i))
    {
        std::cout << i << " is prime" << std::endl;
    }
}

答案 1 :(得分:10)

试试这个:

int increase(int i)
{
    return ++i;
}

获取i的递增值,否则你将获得i的原始值,这将导致你进入无限循环。

更好的方法是使用(为清晰起见):

int increase(int i)
{
    return i+1;
}

答案 2 :(得分:3)

您正在呼叫i++。 i ++记住i具有的值,并返回该值。尝试拨打++i

答案 3 :(得分:3)

return i++;返回i,然后在函数堆栈中增加i, 请改用return ++i;

记得在X ++上做一些事先做一些事情,然后再增加X.

答案 4 :(得分:2)

问题是你的增加功能会不断返回1.要解决问题,请将i++更改为++i,第二个修改i,然后在返回前添加1

答案 5 :(得分:2)

为什么要创建一个增加i的函数。只是i = i + 1;

问题在于i ++;应该改为++ i;

i ++评估i然后递增i,而在评估之前它应该是递增i。

另一个问题从5开始,而不是2,因为你已经处理了案例

bool is_prime(int num)
{
    if(num == 1)
    {
        return false;
    }
    if(num == 2 || num == 3)
    {
        return true;
    }
    for(int i = 5; i < num; i++)
    {
        if(num % i == 0)
        {
            return false;
        }
    }
    return true;
}

另一种做素数的方法:

bool is_prime(int num)
{
  while(1)
  {
     int div = x-1;
     if(x%div==0)
      return false;
     else
     if(div != 1)
         div--;
     else
       return false;
   }
}

答案 6 :(得分:2)

I ++在执行该行后递增I。 ++我在执行该行之前递增I。

您可以检查运算符优先级(它也​​适用于c ++)

c operator precedence

注2解释了为什么返回I ++不起作用。