C++ While循环求值条件

C++ While循环求值条件,c++,while-loop,C++,While Loop,抱歉,如果这个问题看起来很琐碎,但我只是在学习如何编码,而这个问题让我在电脑前呆了大约2个小时,却没有意识到为什么会发生这种情况 我将传递下面的代码。 因此,为了保持简单明了: isPrime()是一个只检查当前数字是否为素数的函数 nPrime()是一个返回n-ism素数的函数,给定n作为参数 这里的关键点是主函数,更准确地说,是first while循环中的数值 如果你运行这段代码,当它到达最后一个素数时,它将进入一个无限循环。如果您只需将第一个while条件从while(number>0)

抱歉,如果这个问题看起来很琐碎,但我只是在学习如何编码,而这个问题让我在电脑前呆了大约2个小时,却没有意识到为什么会发生这种情况

我将传递下面的代码。 因此,为了保持简单明了:

isPrime()是一个只检查当前数字是否为素数的函数

nPrime()是一个返回n-ism素数的函数,给定n作为参数

这里的关键点是主函数,更准确地说,是first while循环中的数值

如果你运行这段代码,当它到达最后一个素数时,它将进入一个无限循环。如果您只需将第一个while条件从while(number>0)更改为while(number>1),就可以轻松解决此问题

这是我无法意识到的奇怪的事情: 如果内部第二个while循环只要编号%n时间(索引)!=0的最后一条指令在循环number/=nprome(索引)时首先发出,程序为什么会进入无限循环

最后一个指令集编号的值为0,因此第一个while循环条件应返回false并退出循环

我错过了什么

谢谢你们的时间和耐心

PS:我被否决了,我不知道为什么,所以我要澄清一下:

我已经做了研究。据我所知,每个消息来源似乎都同意同一点:

当且仅当左操作数大于右操作数时,>条件返回true

这将我带到前面写的问题:如果数字等于0,while循环如何不将数字>0评估为false并退出迭代

#include <iostream>
using namespace std;

bool isPrime(int);
int nPrime(int);


int main() {


    int number = 264;

    if (number > 0)
    {
        int index = 1;

        while(number > 0)
        {
            while (number % nPrime(index) != 0)
            {
                index++;
            }
            cout << nPrime(index) << endl;
            number /= nPrime(index);
        }

    }

    else
        cout << "Error";


    return 0;
    }


bool isPrime(int n)
{
    bool isPrime = false;
    int totalDividends = 0;

        for (int i = 1; i <= n; ++i)
        {
            if (n % i == 0)
                totalDividends++;
        }


    if(totalDividends == 2)
         isPrime = true;

    return isPrime;
}

int nPrime(int n)
{
    int result = 0;

    for (int i = 0; i < n; ++i)
    {
        do
        {
            result++;
        } while (!isPrime(result));
    }

    return result;
}   
#包括
使用名称空间std;
bool-isPrime(int);
int nprome(int);
int main(){
整数=264;
如果(数字>0)
{
int指数=1;
而(数量>0)
{
while(数字%n时间(索引)!=0)
{
索引++;
}
库特
我错过了什么

最后一个指令集编号的值为0

不,不会,它永远不会走那么远。当数字等于1时,则
number%n时间(索引)!=0始终为真,因此内部while循环永远不会退出


你对while循环的理解是完美的,错误的是你对自己代码的理解。这对于这样的bug来说是正常的。

你的问题可能在这里:
while(数字%n时间(索引)!=0)
。很难摆脱
1%的任何东西,除了\u 1
。使用几乎所有开发环境都附带的调试软件逐步检查您的代码将证明我是对的还是错的。无关:对素数筛执行Web搜索,以找到一种更快的计算素数的方法。我支持调试器!你太棒了没错。这正是我所缺少的。谢谢你们的帮助。另外,我检查了Sieve的素数方法:它真的很好,非常有趣!最后,我刚下载了VSCode而不是sublime,为了有一个简单的调试器,所有的建议都非常有用,谢谢!仔细阅读VSCode文档。Stack Overflow从没有正确配置它的人那里收集了大量的问题。看起来它将是一个不错的工具,但它是新的,仍然有点挑剔。实际上,这里真正的问题是,在上一条指令之后,number的值等于1。然后,当传递函数nprome(1)时它会将它除以2,第一个素数,而不是1,条件总是为真。解释得很好,非常感谢John。