2011-02-06 73 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; 
} 

最後否則不應該在最後一個分號。