对于法定增量/减量错误

时间:2017-06-20 18:48:54

标签: c++ function for-loop

我是使用C ++的新手。我读过书,我一直在使用互联网。在这里 - 练习16 - https://en.wikibooks.org/wiki/C%2B%2B_Programming/Exercises/Iterations#EXERCISE_16

我不明白为什么我的' for'当它似乎符合标准时,声明不起作用。完整的代码如下,我将指出那些对我不起作用的位:

#include <iostream>

using namespace std;

void primecheck(int z)
{
    bool primes = true;
    // start at 1 because anything divisible by zero is an error
    for (int i=1; i<=z; i++)
    {
        if (z%i == 0)
        {
            // ignore if divisible by 1 or itself do nothing
            if ( i == z || i == 1)
            {}

            // if it can be divided by anything else it is not a prime
            else
            {
                primes = false;
                //break;
            }
        }
    }
    (primes == true) ? (cout << z << " is a prime number" << endl) : (cout << z << endl);
}

int main()
{
    int x;

    cout << "Enter a number to see if it is a prime number" << endl;
    cin >> x;

    for (x; x>0; x--)
    {
        primecheck(x);
    }
}

工作代码如上所述,但最初我有:

for (x; x<=1; x--)
{
    primecheck(x);
}

对我而言,这更有意义,因为我输入一个高值,例如5,每个循环我希望它减少直到它为1.但每当我这样做时,它只是跳过整个语句。为什么会这样?

2 个答案:

答案 0 :(得分:2)

你需要这个:

for (; x>=1; x--)
{
    primecheck(x);
}

你之前说的只要x是&lt; = 1就继续这个循环。但是你的初始输入将大于1(假设,因为你正在检查素数)所以循环永远不会运行。换句话说,如果您输入任何大于1的数字(比如10),它将检查条件,10 <= 1。这将评估为false并且循环将终止

答案 1 :(得分:1)

for (x; x<=1; x--)
{
    primecheck(x);
}

等同于以下while循环:

x;
while (x<=1)
{
    primecheck(x);
    x--;
}

那是:

  1. x;毫无意义,因为它什么也没做。
  2. for循环中间部分的条件不是停止条件。循环运行只要它是真的。当您输入像5这样的高值时,x<=1从一开始就是假的,因此循环永远不会运行。该条件必须为true才能运行。