【问题标题】:Function isn't working properly,and the debugger isn't helping [closed]功能无法正常工作,调试器没有帮助[关闭]
【发布时间】:2019-12-17 15:15:34
【问题描述】:

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

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

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

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

我在 "NF"(包含在 "TestFactor" 中的一个局部变量)设置了一个断点,以查看它的值,然后我收到一条消息告诉我 "标识符“i”未定义”“i”是一个包含在“FindFactor”函数中的局部变量,该函数实际上可以正常工作。

然后我将断点设置为 "NFactors",这次我得到以下异常:"Largest Prime Factor.exe 中 0x00A01D9D 处的未处理异常: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;
}

总结:

“TestFactor”:输出总是0

主程序:输出永远是输入的最大因子,而不是素数因子。

【问题讨论】:

  • if (NFactors = !0) 这是有意的还是您的意思是if (NFactors != 0)?因为第一个将1!0)赋值给Nfactors
  • 编译器也是非常有用的调试工具。如果您在编译器上打开警告,它可能会告诉您“嘿,我认为这里有问题!”。例如,gcc told me the followingwarning: suggest parentheses around assignment used as truth value。其实我没看懂是什么意思,但是把注意力转移到了有问题的那一行。
  • @MikevanDyke 我修正了那个错字,但程序现在只是崩溃了。

标签: c++ visual-studio debugging breakpoints


【解决方案1】:

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

【讨论】:

  • FindFactor 也是如此,我不敢相信我犯了那个错误,谢谢,程序现在只计算最大因子,而不是主要因子。
  • @TheRiser main while 中的 if 语句条件错误。它应该是 NFactors == 0。
  • 我不敢相信我犯了这样的错误,我可能是业余爱好者,但我不是那么业余,谢谢,程序现在按预期工作:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
相关资源
最近更新 更多