2011-02-06 80 views
2

我的程序已启动并正在运行,但是我的if语句出现问题,导致“scalene”成为除正确输出之外的输出(除非scalene是正确的输出)。看看这个问题:如果声明有问题?

enter image description here

任何人都可以发现的bug?

triangleShape功能

# include "header.h" 

triangleType triangleShape(float sideLength1, float sideLength2, float sideLength3) 
{ 
    triangleType triangle; 

    if (sideLength1 + sideLength2 < sideLength3) 
     triangle = noTriangle; 
    else if (sideLength1 + sideLength3 < sideLength2) 
     triangle = noTriangle; 
    else if (sideLength3 + sideLength2 < sideLength1) 
     triangle = noTriangle; 
    else if (sideLength1 == sideLength2 == sideLength3) 
     triangle = equilateral; 
    else if (sideLength1 == sideLength2) 
     triangle = isoceles; 
    else if (sideLength1 == sideLength3) 
     triangle = isoceles; 
    else if (sideLength2 == sideLength3) 
     triangle = isoceles; 
    else 
     triangle = scalene; 

    return triangle; 
} 

输出功能

# include "header.h" 

void output (float sideLength1, float sideLength2, float sideLength3) 
{ 
    if (triangleShape (sideLength1, sideLength2, sideLength3) == noTriangle) 
     cout << "Side lenghts of " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << " would not form a triangle." << endl; 
    else if (triangleShape (sideLength1, sideLength2, sideLength3) == equilateral) 
     cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << "would be " << 
     "an equilateral triangle."<< endl; 
    else if (triangleShape (sideLength1, sideLength2, sideLength3) == isoceles) 
     cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << "would be " << 
     "an isoceles triangle."<< endl; 
    else (triangleShape (sideLength1, sideLength2, sideLength3) == scalene); 
     cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << " would be " << 
     "a scalene triangle."<< endl; 
} 
+0

在相关说明中,我建议您使用`switch` /`case`构造或查找表来避免所有这些`if',这将使代码更具可读性并避免这种错误。 – 2011-02-06 01:09:42

+1

除了任何其他问题,比较`if(sideLength1 == sideLength2 == sideLength3)`不会做你认为的事情。 – Blastfurnace 2011-02-06 01:11:49

回答

9

你必须在这条线一个额外的分号:

else (triangleShape (sideLength1, sideLength2, sideLength3) == scalene); 

在删除分号结束,和在行中添加if(或完全删除检查)。这导致在“else”之后的打印始终发生,因为它成为一个单独的声明。

,你可以做以下任一:

else if (triangleShape (sideLength1, sideLength2, sideLength3) == scalene) 
    cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << " would be " << 
    "a scalene triangle."<< endl; 

或者:

else // There are no other options here... 
    cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << " would be " << 
    "a scalene triangle."<< endl; 

话虽这么说,你可能要考虑运行你的函数一次,并存储结果,然后做你的支票反对那个结果(甚至使用switch statement)。


另外,正如Blastfurnace指出的那样,您的比较不正确。您应该使用:

if ((sideLength1 == sideLength2) && (sideLength1 == sideLength3)) 
3
else (triangleShape (sideLength1, sideLength2, sideLength3) == scalene); 

应该

else if (triangleShape (sideLength1, sideLength2, sideLength3) == scalene) 
0
void output (float sideLength1, float sideLength2, float sideLength3) 
{ 
    if (triangleShape (sideLength1, sideLength2, sideLength3) == noTriangle) 
     cout << "Side lenghts of " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << " would not form a triangle." << endl; 
    else if (triangleShape (sideLength1, sideLength2, sideLength3) == equilateral) 
     cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << "would be " << 
     "an equilateral triangle."<< endl; 
    else if (triangleShape (sideLength1, sideLength2, sideLength3) == isoceles) 
     cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << "would be " << 
     "an isoceles triangle."<< endl; 
    else (triangleShape (sideLength1, sideLength2, sideLength3) == scalene); 
     cout << "A triangle with sides of lengths " << sideLength1 << " " << sideLength2 << " and " << sideLength3 << " would be " << 
     "a scalene triangle."<< endl; 
} 

最后否则不应该在最后一个分号。