如图,希望输出三角形面积的面积,若不是三角形则输出-1,但是运行结果是奇怪的字母,程序哪里出错了?
当输入的三边不构成三角形时,程序会输出 -1。但是程序还有一个潜在的 bug:如果输入的三边构成的三角形的面积是无限大的,那么程序就会输出 nan。
在这种情况下,程序会运行一个无限循环,每次都读入三边的值,计算三角形的面积,并将其输出。这样就会看到一连串的 nan,而不是期望的三角形的面积。
解决方法是在输入完三边之后,再检查一下三边是否构成三角形。如果不是,就不计算三角形的面积,直接输出 -1。
正确的代码应该是这样的:
#include <fstream>
#include <cmath>
using namespace std;
bool is_triangle(float a, float b, float c)
{
return a + b > c && a + c > b && b + c > a && b - c < a && a - c < b && a - b < c;
}
int main()
{
ifstream inf("in.txt", ios::in);
ofstream outf("out.txt", ios::out);
float a, b, c, p;
float s;
while (!inf.eof())
{
inf >> a >> b >> c;
if (is_triangle(a, b, c))
{
p = (a + b + c) / 2;
s = sqrt((p * (p - a) * (p - b) * (p - c)));
outf << s << '\n';
}
else
{
outf << "-1" << '\n';
}
}
inf.close();
outf.close();
return 0;
}
仅供参考,望采纳,谢谢。
33行改成return 0,否则42行都会认为if条件成立的。-1也是true