同时评估条件

While-loop evaluation condition

本文关键字:条件 评估      更新时间:2023-10-16

对不起,如果这个问题似乎真的很琐碎,但是我只是在学习如何编码,这使我在计算机前呆了大约2个小时,而没有意识到为什么会发生这种情况。<<<<

我将通过下面的代码。因此,为了使其保持直接:

isprime((是一个功能,只需检查当前号是否是素数。

nprime((是一个返回n-主义素数的函数,将n作为参数。

关键点是主函数,更确切地说, number value >中首先while-loop

如果您运行此代码,则在达到 number 的最后一个质量数字时,它将输入无限循环。如果您只是将第一个更改为而(数字> 0( while(number> 1(

那是我无法意识到的奇怪的事情:如果内部第二个while-loop 不会像 number%nprime(index(!= 0 一起退出,而的最后一个指令wirloop number/= nprime(index(; ,该程序如何进入无限循环?

最后一个指令将数字的值设置为0,因此第一个wher-loop条件应返回 false 并退出循环。

我缺少什么?

谢谢大家的时间和耐心。

ps:我被投票下来了,我不知道为什么,所以我会澄清一下:

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

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

将我带到先前写的问题:如果 number 等于 to 0,while-loop如何不评估 number> number> 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;
}   

我缺少什么?

最后一个指令将数字的值设置为0

不,它没有,它永远不会走那么远。当数字等于一个时, number % nPrime(index) != 0始终是正确的,因此内部循环永远不会退出。

您对循环的理解是完美的,这是您对自己的代码所做的错误的理解。对于这样的错误,这是正常的。