我找到谐波数,该函数循环直到它找到正确的谐波数,只要我用来调试程序的行输入是 cout线在最后。如果我删除了cout的任何部分,程序将再次失败。关于cout如何影响该计划,我完全不知所措。没有它,一切都存储零。
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;
}
答案 0 :(得分:0)
您没有更高和更低的默认值,因此当这两个条件都不为真时,将发生未定义的行为:
if (Numerator > Denominator)
... 否则如果(分子&lt; Denominator)
我建议你打开编译器警告,以便报告这些错误。如果你正在使用GCC / Clang打开“-Wall”。
当您使用调试器进行步骤时,这应该是一个简单的方法。