C++ 函数因调试行而工作
我在寻找调和数,函数循环,直到找到正确的调和数,只要我用来调试程序的那一行是输入,它就是 最后一行。如果我删除cout的任何部分,程序就会再次失败。我完全不知道议会是如何影响这个计划的。没有它,一切都存储零C++ 函数因调试行而工作,c++,function,debugging,cout,C++,Function,Debugging,Cout,我在寻找调和数,函数循环,直到找到正确的调和数,只要我用来调试程序的那一行是输入,它就是 最后一行。如果我删除cout的任何部分,程序就会再次失败。我完全不知道议会是如何影响这个计划的。没有它,一切都存储零 struct fraction { long nume, denom; }; void add (fraction x, fraction y, fraction& result) { long Numerator, Denominator, GCD, Higher, Lo
struct fraction
{
long nume, denom;
};
void add (fraction x, fraction y, fraction& result)
{
long Numerator, Denominator, GCD, Higher, Lower;
Numerator = (x.nume * y.denom + x.denom * y.nume);
Denominator = (x.denom * y.denom);
if (Numerator > Denominator)
{
Lower = Denominator;
Higher = Numerator;
}
else if (Numerator < Denominator)
{
Higher = Denominator;
Lower = Numerator;
}
while (Higher % Lower > 0)
{
GCD = Higher % Lower;
Higher = Lower;
Lower = GCD;
}
result.nume = Numerator/GCD;
result.denom = Denominator/GCD;
cout << "d " << result.nume << " " << GCD << " " << Denominator/GCD << " " << result.denom << endl;
结构分数
{
长努姆,德南;
};
添加空隙(分数x、分数y、分数和结果)
{
长分子、分母、GCD、较高、较低;
分子=(x.nume*y.denom+x.denom*y.nume);
分母=(x.denom*y.denom);
if(分子>分母)
{
下限=分母;
较高=分子;
}
else if(分子<分母)
{
较高=分母;
下限=分子;
}
而(较高百分比较低>0)
{
GCD=较高%较低;
高=低;
较低=GCD;
}
result.nume=分子/GCD;
result.denom=分母/GCD;
cout您没有“较高”和“较低”的默认值,因此当这两个条件都不成立时,将出现未定义的行为:
if (Numerator > Denominator)
。。。
else if(分子<分母)
我建议您打开编译器警告,以便报告此类错误。如果您使用GCC/Clang,请打开“-Wall”
当你使用调试器时,这应该是一个很容易理解的问题。所以我把上下两个都改为等于0,得到了一个浮点异常,然后我尝试了1和同样的事情。然后我把分子改为分母,得到了一个浮点异常。你可能应该充实你原来的帖子,然后形成一个a,否则这就是错误将变成20个问题。另外,您使用的是哪个调试器?您是对的,我还必须将GCD设置为等于1。感谢您的帮助。不用担心-我建议您将基于GCD减少分数的代码拆分为它自己的函数reduce,并从简化版的“add”调用它。