C++ 我的程序查找三角形C++;而我';I’我的if-else语句有问题

C++ 我的程序查找三角形C++;而我';I’我的if-else语句有问题,c++,if-statement,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 >&

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

#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;

}
#包括
使用名称空间std;
int main(){
浮子a侧、b侧、c侧;
内等,iso,sca,直角;
内等角相同、等角相同、斜角相同、直角相同;
cin>>a侧>>b侧>>c侧;
如果((a侧=b侧)和&(b侧=c侧)和&(a侧=c侧)){

cout等腰三角形可以是直角三角形,您需要在等腰三角形条件中加入与if语句相同的条件

它是什么类型的三角形;等边三角形、等腰三角形、不等边三角形、直角三角形或它们的组合


如果<强>第一< /强>考虑四种角度分类:

  • 等边
  • 等腰
  • 异丙苯
  • 不是三角形(例如,一个长度大于其他两个长度的总和,或者一个或多个长度不是正的,等等)

< > < <强> >如果它是直角三角形(如果是等腰或不等边),代码将更容易编写和理解。


您正在测试与等腰线和不等腰线相同的
if
语句链中的直角三角形,但您可以是直角不等腰线或直角等腰线。

您将其过度复杂化。尝试创建不同的函数来确定三角形是否属于同一类型,并将其标记,然后使用==代替=:

我会怎么做: 在第一次测试中,如果
-s,则不要写入
,如果
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.";
Equi(…)
和其他函数,您可以用第一部分中的语句替换它们,我只是不想为了更紧凑的代码而复制它们

我希望它能有所帮助。

您正在为此程序使用“else-if”用例。一旦第一个条件为true,编译器将跳过下面提到的所有测试用例。最安全的方法是使用多个if()条件并为三角形指定布尔标志

例如:

if(equilateral)
  bool Equilateral=true;

if(isoceles)
  bool Isoceles=true;


if(rightAngled)
  bool RightAngled=true;
现在,您可以检查直角等参线条件,如果为true,则可以将其标志设置为true

最后,编写具体的测试用例,找出三角形的实际含义。

boolfisosceles(双a、双b、双c)
bool FIsosceles(double a, double b, double c)
{
    return ((a == b) || (a == c) || (b == c));
}

bool FEquilaterlal(double a, double b, double c)
{
    return ((a == b) && (a == c));
}

bool FRightAngle(double a, double b, double c)
{
    return  ((a > b) && ( a > c)) ? (a*a == b*b + c*c) : (b > c ? (b*b == a*a + c*c) : (c*c == b*b + a*a));
 }

int main()
{
    double side_a, side_b, side_c;

    cin >> side_a >> side_b >> side_c;

    if(FIsosceles(side_a, side_b, side_c))
    {
         cout << " and an isosceles triangle";
         if(FEquilateral(side_a, side_b, side_c))
         {
              cout << " and an equilateral triangle";
         }
         else if(FRightAngle(side_a, side_b, side_c))
         {
              cout << " and right triangle";
         }
   }
   else if(FRightAngle(side_a, side_b, side_c))
   {
          cout << " and right triangle";
   }
   else
   {
           cout << " Either an scalene triangle or not a triangle";
    }
}
{ 返回((a==b)| |(a==c)| |(b==c)); } 双甲双乙双丙 { 返回((a==b)和&(a==c)); } 布尔恐怖角(双a、双b、双c) { 返回((a>b)和&(a>c))?(a*a==b*b+c*c):(b>c?(b*b==a*a+c*c):(c*c==b*b+a*a)); } int main() { 双面_a、双面_b、双面_c; cin>>a侧>>b侧>>c侧; if(FIsosceles(a侧、b侧、c侧)) {
旁白:如果
a==b
b==c
你不需要在后面的测试中检查
a==c
,你在使用
=
的地方应该使用
=
@molbdnilo是的,这是个错误。非常感谢你。太尴尬了。是的,我的错误是用了“=”而不是“=”。谢谢你的标志(?)方法。我不明白,但我会仔细阅读,确保稍后我理解。但是,你能告诉我命名空间std格式的最后一行是什么样子吗?
bool FIsosceles(double a, double b, double c)
{
    return ((a == b) || (a == c) || (b == c));
}

bool FEquilaterlal(double a, double b, double c)
{
    return ((a == b) && (a == c));
}

bool FRightAngle(double a, double b, double c)
{
    return  ((a > b) && ( a > c)) ? (a*a == b*b + c*c) : (b > c ? (b*b == a*a + c*c) : (c*c == b*b + a*a));
 }

int main()
{
    double side_a, side_b, side_c;

    cin >> side_a >> side_b >> side_c;

    if(FIsosceles(side_a, side_b, side_c))
    {
         cout << " and an isosceles triangle";
         if(FEquilateral(side_a, side_b, side_c))
         {
              cout << " and an equilateral triangle";
         }
         else if(FRightAngle(side_a, side_b, side_c))
         {
              cout << " and right triangle";
         }
   }
   else if(FRightAngle(side_a, side_b, side_c))
   {
          cout << " and right triangle";
   }
   else
   {
           cout << " Either an scalene triangle or not a triangle";
    }
}