經典入門練習:輸入三邊長判斷三角形類型。原代碼因 if-else 順序不當,導致等邊三角形被優先判定為等腰,且直角判斷邏輯有誤(4,5,6 非勾股數卻被判為直角)。
if (a==b || a==c || b==c) // 1. 先判等腰
printf("等腰");
else if (a*a+b*b==c*c ...) // 2. 再判直角
printf("直角");
else if (a==b==c) // 3. 最後判等邊(永不執行)
printf("等邊");
問題:a==b==c 在 C 中解析為 (a==b)==c,結果為 0 或 1,永不為真。
if (a==b && b==c) {
printf("等邊");
} else if (a==b || a==c || b==c) {
printf("等腰");
} else if (a*a+b*b==c*c || b*b+c*c==a*a || a*a+c*c==b*b) {
printf("直角");
} else {
printf("普通三角形");
}
a+b>c && a+c>b && b+c>a 確保能構成三角形scanf("%d,%d,%d") 要求逗號分隔,建議改為空格分隔更友好