You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++三角形类型判断程序isosceles分支不执行、else分支异常触发问题

问题原因分析

  1. 缺失合法三角形前置校验:当前代码仅校验了边长为正,未校验三边是否满足三角形核心构成条件:任意两边之和大于第三边。你测试用的1,1,2属于退化三角形,虽然满足两条边相等,但根本不属于合法三角形,不在预设分类范围内。
  2. 代码存在无效冗余字符:你贴出的代码中using namespace std;后多了一行markdown代码块标记```c++,若实际代码中也包含这行,会导致编译异常、执行逻辑混乱,这也是输入1,1,1时同时输出等边和OTHER提示的核心原因。
  3. 判定逻辑冗余易出错:原有等腰判定逻辑额外校验了第三边不等,实际上已经通过else if排除了等边场景,冗余判断反而增加了写错的概率。
  4. 重复选择分支处理不全:当用户输入的重复选择不是1或2时,两个分支都不触发,程序会无提示直接进入下一轮循环。

修复方案

核心修改点

  • 清理代码中的无效标记字符,保证语法正确
  • 新增合法三角形校验,不满足条件直接提示错误
  • 简化等腰判定逻辑,减少出错概率
  • 补全重复选择的非法输入处理逻辑

修复后完整代码

#include <iostream>
using namespace std;

int main()
{
    do
    {
        int sideA, sideB, sideC;
        cout << "Please enter side A: ";
        cin >> sideA;
        while (sideA <= 0) { // 修正:边长不能为0
            cout << "Value entered must be positive!" << endl;
            cout << "Please enter side A: ";
            cin >> sideA;
        }
        cout << "Please enter side B: ";
        cin >> sideB;
        while (sideB <= 0) {
            cout << "Value entered must be positive!" << endl;
            cout << "Please enter side B: ";
            cin >> sideB;
        }
        cout << "Please enter side C: ";
        cin >> sideC;
        while (sideC <= 0) {
            cout << "Value entered must be positive!" << endl;
            cout << "Please enter side C: ";
            cin >> sideC;
        }

        // 新增:合法三角形校验
        if (sideA + sideB <= sideC || sideA + sideC <= sideB || sideB + sideC <= sideA) {
            cout << "The entered values cannot form a valid triangle!" << endl;
        } else {
            int aSquare = sideA * sideA;
            int bSquare = sideB * sideB;
            int cSquare = sideC * sideC;
            if (sideA == sideB && sideA == sideC) {
                cout << "This is an EQUILATERAL triangle!(all sides are equal)" << endl;
            } else if (sideA == sideB || sideA == sideC || sideB == sideC) { // 简化等腰判定
                cout << "This is an ISOSCELES triangle, where only two sides are equal" << endl;
            } else if (cSquare==aSquare+bSquare || aSquare == cSquare + bSquare || bSquare == aSquare + cSquare) {
                cout << "This is a RIGHT triangle!" << endl;
            } else {
                cout << "This is a OTHER kind of triangle, not ISOSCELES, not RIGHT, not EQUILATERAL" << endl;
            }
        }

        int repeat;
        cout << "Would you like to repeat( 1-YES, 2-NO)";
        cin >> repeat;
        if (repeat == 1)
            continue;
        else if (repeat == 2)
            break;
        else {
            cout << "Invalid input, program will exit." << endl;
            break;
        }
    }
    while (true);
    return 0;
}

内容的提问来源于stack exchange,提问作者Was

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:45:03