gpt4 book ai didi

C++ 程序崩溃且没有错误

转载 作者:行者123 更新时间:2023-11-30 02:31:39 25 4
gpt4 key购买 nike

我正在使用 C++ 编写一个小数类,但是我遇到了这个代码块的问题:

ostream& operator << (ostream &out , Fraction &cfraction)
{
int gcd = normalize (cfraction) ;
cfraction.numerator /= gcd ;
cfraction.denominator /= gcd ;

try
{
if (cfraction.denominator < 0)
{
cfraction.numerator *= -1 ;
cfraction.denominator *= -1 ;
}
//needs editing

if (cfraction.denominator == 0)
throw "Not defined" ;

if (cfraction.numerator == 0 && cfraction.denominator != 0)
out << cfraction.numerator ;

if (cfraction.denominator == 1)
{
out << cfraction.numerator ;
}

else
out << cfraction.numerator << "/" << cfraction.denominator ;
}

catch (const char* error)
{
cerr << "ERROR: " << error << " " ;
}

return out ;
}

如果 cfraction.numeratorcfraction.denominator 等于 0,我的程序会崩溃。

任何人都可以告诉我我的代码到底有什么问题吗?

更新 - 已解决,必须检查 gcd 是否为零。感谢所有回答的人。

最佳答案

如果除以零,程序就会崩溃。这是它能做的最好的,因为除以零不能产生有意义的结果。您唯一能做的就是在除法之前检查零,例如:

int a = 1;
int b = 0;
assert( b != 0 );
int c = a/b;

通常您会希望用一些更合理的错误处理来替换 assert。在极少数情况下,通过在除法之前添加一些 epsilon 来避免被零除甚至可能是有意义的。例如

double d = 1.0;
double e = 0.0;
double eps = 1.0e-10;
double f = d/(e + eps);

但是,这可能很危险,因为它在代码中隐藏了一些问题(除以零几乎总是一个问题)。

关于C++ 程序崩溃且没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com