我是使用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.但每当我这样做时,它只是跳过整个语句。为什么会这样?
答案 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--;
}
那是:
x;
毫无意义,因为它什么也没做。for
循环中间部分的条件不是停止条件。循环运行只要它是真的。当您输入像5
这样的高值时,x<=1
从一开始就是假的,因此循环永远不会运行。该条件必须为true才能运行。