功能无法正常运行,调试器也无法提供帮助

时间:2019-08-09 21:52:20

标签: c++ visual-studio debugging breakpoints

我正在尝试编写一个程序来计算用户输入的数字的最大素数,函数“ FindFactor” 计算存储在变量中的最大素数“因子” 和函数“ TestFactor” 进行测试以查看该因子有多少个因子,如果,则将其存储在“ NFactors” 中“ NFactors” 等于 0 ,Factor是一个主要因素,否则,初始输入值将替换为“ Factor”,然后循环再次开始。

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

经过一番摸索后,我已经确认问题出在“ TestFactor” 中,因为“ FindFactor” 能够正确计算最大因子,但是我不知道为什么“ TestFactor” 总是输出 0 ,因为这两个函数实际上是相同的。

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

我将断点设置为“ TestFactor” 中包含的局部变量“ NF” ,以查看其值,并收到一条消息,告诉我”标识符“ i”未定义” “ i” “ FindFactor” 中包含的局部变量,该函数实际上可以正常工作。

然后我将断点设置为“ NFactors” ,这一次出现以下异常:“最大的Prime Factor.exe中0x00A01D9D的未处理异常:0xC0000094:整数除以零。 “

请参考以下操作:

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

主程序:输出始终是输入的最大因素,而不是素数因素。

1 个答案:

答案 0 :(得分:1)

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