功能无法正常工作,调试器也无济于事

Function isn't working properly,and the debugger isn't helping

我正在尝试编写一个程序来计算用户输入的数字的最大质因数,函数 "FindFactor" 计算最大因数是存储在变量 "Factor" 中,函数 "TestFactor" 测试该因子有多少个因子,然后存储在"NFactors",如果"NFactors"等于0,因子是一个质因数,如果不是,则将初始输入值替换为"Factor"并重新开始循环。

问题是任何给定数字的输出是输入的最大因素,而不是 prime 因素。

经过一些修修补补,我确认问题出在"TestFactor"因为"FindFactor"能够正确计算最大因子,但我不知道为什么 "TestFactor" 总是输出 0,因为这两个函数实际上是相同的。

当我尝试使用调试器时,事情变得更加奇怪,(但这可能是因为这是我第一次使用它,我不知道我在做什么):

我设置断点到"NF",一个local包含在"TestFactor",看看值,我收到一条消息,告诉我 "identifier "i" is undefined","i" 是包含在"FindFactor" 实际工作正常的函数。

然后我将断点设置为"NFactors",这次我得到以下异常:"Unhandled exception at 0x00A01D9D in Largest Prime Factor.exe: 0xC0000094: Integer division by zero."

参考以下操作:

if (y % j == 0)

这绝对不是这种情况,因为 j=y-1.

完整程序如下:

#include <iostream>
using namespace std;

int FindFactor(int x);
int TestFactor(int y);

int main() {



    int input, Factor, NFactors,inputsave; bool prime=false;

    cout << "Please enter a number" << endl;
    cin >> input;
        inputsave = input;
        while (prime == false) {

            Factor = FindFactor(input);
                NFactors = TestFactor(Factor);

                if (NFactors != 0) {
                    prime = true;
                }
                else {
                    prime = false;
                    input = Factor;
                }
        }

        cout << "The largest prime factor for " << inputsave << " is " << Factor << endl;
}

int FindFactor(int x) {

    int i;
    for (i = x - 1; i > 1; i--) {
        if (x % i == 0) {
            break;

        }
        else {};
    }
    return i;
}

int TestFactor(int y) {
    int j, NF = 0;
    for (j = y - 1; j > 1; j--) {

        if (y % j == 0) {
            NF++;
        }
        else {};
        }


    return NF;
}

总结:

"TestFactor":输出总是0.

主要Program:Output始终是输入的最大因子,而不是主要因子。

TestFactor 中有错字,使用 j > 1 作为循环条件。