功能无法正常工作,调试器也无济于事
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 作为循环条件。
我正在尝试编写一个程序来计算用户输入的数字的最大质因数,函数 "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 作为循环条件。