函数无法正常工作,调试器没有帮助

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

本文关键字:调试器 有帮助 工作 常工作 函数      更新时间:2023-10-16

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

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

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

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

我将断点设置为">NF">,这是"TestFactor"中包含的局部变量,以查看它的值,我收到一条消息,告诉我"标识符"i">未定义","i"是包含在"FindFactor">中的局部变量实际正常工作的函数。

然后我为"NFactor">设置了一个断点,这次我得到以下异常:">最大素因数0x00A01D9D未处理的异常.exe:0xC0000094:整数除以零。

参考如下操作:

如果 (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;
}

总结一下:

"测试因子">:输出始终为0

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

TestFactor 中有一个拼写错误,使用 j> 1 作为循环的条件。