c++ - 我的程序找到了三角形 C++ 的类型,但我的 if-else 语句遇到了问题

标签 c++ if-statement

这是我正在处理的简单代码。代码的目标是接受三个浮点值,然后找出它是什么类型的三角形;等边、等腰、不等边角、直角或这些的组合。

#include <iostream>
using namespace std;

int main(){

float side_a, side_b, side_c;
int equi, iso, sca, right_angle;
int equi_same, iso_same, sca_same, right_angle_same;


cin >> side_a >> side_b >> side_c;

if( (side_a == side_b) && (side_b == side_c) && (side_a == side_c ) ){

    cout << "\nThis is an equilateral triangle";

    equi = 1;
    iso = 0;
    sca = 0;
    right_angle = 0;
    equi_same = 1;
}

else if((side_a == side_b) || (side_b == side_c) || (side_b == side_c)){

    cout << "\nThis is an isosceles triangle";

    iso = 1;
    equi = 0;
    sca = 0;
    right_angle = 0;
    iso_same = 1;

}

else if( ( (side_a*side_a) == ( (side_b*side_b) + (side_c*side_c) ) ) ||
         ( (side_b*side_b) == ( (side_a*side_a) + (side_c*side_c) ) ) ||
         ( (side_c*side_c) == ( (side_a*side_a) + (side_b*side_b) ) )  ){


    cout << "\nThis is a right angled triangle";

    right_angle = 1;
    equi = 0;
    iso = 0;
    sca = 0;
    right_angle_same = 1;       

}

else{

    cout << "\nThis is a scalene triangle";

    sca = 1;
    equi = 0;
    iso = 0;
    right_angle = 0;
    sca_same = 1;

}


if( (equi = 1) && (equi_same != 1) ){
    cout << " and an equilateral triangle";
}

else if((iso = 1) && (iso_same != 1)){
    cout << " and an isosceles triangle";
}

else if((right_angle = 1) && (right_angle_same != 1)){
    cout << " and a right angled triangle";
}

else if((sca = 1) && (sca  != 1)){
    cout << " and a scalene triangle";
}

else{
    cout << "\n";
}

return 0;

}

我遇到的困难是如何让代码发现它也是其他三角形的组合。编写代码后,我意识到如果第一个语句为 true,那么代码将不会检查其他 else if 语句。是否有任何我错过但没有注意到的错误?如果不是,那么我应该如何更改我的代码?提前致谢!

编辑:在测试运行中,如果我输入相同的数字,输出将是:

It is an equilateral triangle and a right angled triangle

但是如果我输入满足其他要求的数字,则输出:

It is a (depends on input) triangle and an equilateral triangle

也许我在直角部分或等边部分做错了什么,或者还有什么我错过的吗?

最佳答案

你把事情想得太复杂了。尝试创建不同的函数来确定三角形是否属于某种类型,并对其进行标记,并使用 == 而不是 =:

我会怎么做:

在你的第一个测试中不要写 else if -s,只是if s。不输出结果,只设置标志。

稍后检查标志,并写入结果。

if(Equi(side1, side2, side3))
    equi = 1;
if(Iso(side1, side2, side3))
    iso = 1;
if(Sca(side1, side2, side3))
    sca = 1;
if(RightAngled(side1, side2, side3))
    rang= 1;

std::cout << "This is a " << equi == 1 ? "equilateral" : "" << ... << " triangle.";

编辑:与 using namespace std您可以省略 std::在一开始的时候。 equi == 1 ? "equilateral" : ""是一个条件表达式: 之前 ?标记有一个条件,如果为真,则返回 "equilateral" : "" 的第一边表达式,如果为 false,则为空字符串(即“”)。因此,如果设置了标志,它只会输出一些内容。查看http://www.cplusplus.com/forum/articles/14631/

示例:

// condition ? if_true_return_this : if_false_return_this
int x = true ? 1 : 2; //x will be 1
x = ((x == 2) ? 0 : 3); //x will be 3, since x == 2 is false, so the second in ... : ... is returned.

Equi(...)其他的是函数,您可以用第一部分中的语句替换它们,我只是不想复制它以获得更紧凑的代码。

希望对您有所帮助。

关于c++ - 我的程序找到了三角形 C++ 的类型,但我的 if-else 语句遇到了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048152/

相关文章:

java - 为什么我的程序在条件为假时进入 while 循环?

c++ - Lambda表达式可以降级到C++ 98吗

c++ - 这种删除指针的行为正常吗?

c++ - Std::stoul 在 C++ 中失败后未被捕获

javascript - 如何防止 javascript if 语句将 0 评估为空字符串?

c++ - 将数组中的位置存储为要在 if 语句中更改的变量

c++ - opencv安装错误ubuntu

c++ - 现有 VoIP 系统的视频流 - 应该使用哪些库?

java - 返回数组的剩余值

Haskell If 的多个条件