为什么程序运行的结果不对没有输出数字,反而输出了字母

img

如图,希望输出三角形面积的面积,若不是三角形则输出-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