2015-11-25 31 views
-2

所以这可能是我的第一个基本程序。它接受用户关于三角形的输入,然后对它们进行分类并输出给出的数据所暗示的三角形类型。我一直在猜测,如果事情只是用C++来玩,但我遇到了问题。我没有从我的程序中得到预期的结果(虽然以前不完美),而不是输入边长,我输入第一边的长度,它会自动跳过其他两边的长度并继续编码。我的代码中有错误,可能是语法错误,或者我找不到if语句。编程新手

#include <iostream> 

using std::cout; 
using std::cin; 
int sideA, sideB, sideC, angleA, angleB, angleC, longest, middle, shortest, sumbc, sumac, sumab; 
int main() 
{ 
cout << "Enter an angle for angle A\n"; 
cin >> angleA; 
cout << "Enter an angle for angle B\n"; 
cin >> angleB; 
cout << "Enter an angle for angle C\n"; 
cin >> angleC; 
sumbc = angleB+angleC; 
sumac = angleA+angleC; 
sumab = angleA+angleB; 
if(angleA + angleB + angleC == 180){ // This confirms that the angles add to 180 to form a triangle 
     cout << "This is a triangle!(Based on Angles)\n"; 

if(angleA == 90){ // These are for right angle triangles 
     cout << "This is a real right triangle!(angleA is 90 degrees..)\n"; 
     cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
     if(sideA > sideB && sideA > sideC){ 
      longest = sideA; 
      cout << "Side 1 is the hypotenuse!\n"; 
     } 
     else if(sideB > sideA && sideB > sideC) { 
      cout << "Side 2 is the hypotenuse\n"; 
      longest = sideB; 
     } 
     else if(sideC > sideA && sideC > sideB){ 
      cout << "The hypotenuse is Side 3\n"; 
      longest = sideC; 
     } 
     if(longest == sideC && sideA == sideB) { //Determines what kind of triangle it is if the longest side is sideC 
       cout << "This triangle is Right and Isosceles\n "; 

     } 
     else if(longest == sideB && sideC == sideA){ 
       cout << "This triangle is Right and Isosceles\n "; 

     } 
     else if(longest == sideA && sideB == sideC){ 
      cout << "This triangle is Right and Isosceles\n "; 
     } 
     else { 
      cout << "This triangle is right and Scalene!\n"; 
     } 


    } 
if(angleB == 90){ // These are for right angle triangles 

     cout << "This is a real right triangle!(angleB is 90 degrees..)\n"; 
     cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
     if(sideA > sideB && sideA > sideC){ //Finds longest side 
      longest = sideA; 
      cout << "Side 1 is the hypotenuse!\n"; 
     } 
     else if(sideB > sideA && sideB > sideC) { 
      cout << "Side 2 is the hypotenuse\n"; 
      longest = sideB; 
     } 
     else if(sideC > sideA && sideC > sideB){ 
      cout << "The hypotenuse side is Side 3"; 
      longest = sideC; 
     } 
     if(longest == sideC && sideA == sideB) { //Determines what kind of triangle it is if the longest side is sideC 
       cout << "This triangle is Right and Isosceles\n "; 

     } 
     else if(longest == sideB && sideC == sideA){ 
       cout << "This triangle is Right and Isosceles\n "; 

     } 
     else if(longest == sideA && sideB == sideC){ 
      cout << "This triangle is Right and Isosceles\n "; 
     } 
     else { 
      cout << "This triangle is right and scalene!\n"; 
     } 


    } 
if(angleC == 90){ // These are for right angle triangles 


     cout << "This is a real right triangle!(angleC is 90 degrees..)\n"; 
     cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
     if(sideA > sideB && sideA > sideC){ 
      longest = sideA; 
      cout << "Side 1 is the hypotenuse!\n"; 
     } 
     else if(sideB > sideA && sideB > sideC) { 
      cout << "Side 2 is the hypotenuse\n"; 
      longest = sideB; 
     } 
     else if(sideC > sideA && sideC > sideB){ 
      cout << "The hypotenuse is Side 3"; 
      longest = sideC; 
     } 
     if(longest == sideC && sideA == sideB) { //Determines what kind of triangle it is if the longest side is sideC 
       cout << "This triangle is Right and Isosceles\n "; 

     } 
     else if(longest == sideB && sideC == sideA){ 
       cout << "This triangle is Right and Isosceles\n "; 

     } 
     else if(longest == sideA && sideB == sideC){ 
      cout << "This triangle is Right and Isosceles\n "; 
     } 
     else { 
      cout << "This triangle is right and scalene!\n"; 
     } 


    } 
if(angleA == angleB && angleB == angleC){ // This is for equiangular/equilateral triangles 

      cout << "This is an equiangular/equilateral triangle.\n "; 
      cout << "Please enter the side lengths now\n"; 
      cout << "Side 1:\n"; 
      cin >> sideA; 
      int periequal = sideA*3; 
      int areaequal = sideA*sideA*.5; 
      cout << "The area is : " << areaequal << std::endl << "The perimeter is: " << periequal << std::endl; 
      cout << "This triangle is Isosceles, Equiangular, Equilateral, and Acute "; 


      } 

    if(angleA < 90 && sumbc != 120 && angleB < 90 && angleC < 90){ //deals with acute triangles 
     cout << "This is an acute triangle!\n"; 
     cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
     int AcuteIsoPeri = sideA + sideB + sideC; 
      if (sideA == sideB){ 
        cout << "This is an Acute, Isosceles Triangle. \n" << "With a perimeter of: " << AcuteIsoPeri; 

      } 
      else if(sideA == sideC){ 
       cout << "This is an Acute, Isosceles Triangle. \n" << "With a perimeter of: " << AcuteIsoPeri; 
      } 
      else if(sideB == sideC){ 
       cout << "This is an Acute, Isosceles Triangle. \n" << "With a perimeter of: " << AcuteIsoPeri; 
      } 
      else{ 
       cout << "This is an Acute, Scalene Triangle. \n" << "With a perimeter of " << AcuteIsoPeri; 
      } 

    } //end of angleA if statement 
    if(angleA > 90){ //Deals with obtuse 
    cout << "This angle is Obtuse, angle A is greater than 90.."; 
    cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
      if (sideA == sideB){ 
        cout << "This is an Obtuse, Isosceles Triangle. \n"; 

      } 
      else if(sideA == sideC){ 
       cout << "This is an Obtuse, Isosceles Triangle. \n"; 
      } 
      else if(sideB == sideC){ 
       cout << "This is an Obtuse, Isosceles Triangle. \n"; 
      } 
      else{ 
       cout << "This is an Obtuse, Scalene Triangle. \n"; 
      } 
} 
     else if(angleB > 90){ 
    cout << "This angle is Obtuse, angle B is greater than 90.."; 
    cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
         if (sideA == sideB){ 
        cout << "This is an Obtuse, Isosceles Triangle. \n"; 

      } 
      else if(sideA == sideC){ 
       cout << "This is an Obtuse, Isosceles Triangle. \n"; 
      } 
      else if(sideB == sideC){ 
       cout << "This is an Obtuse, Isosceles Triangle. \n"; 
      } 
      else{ 
       cout << "This is an Obtuse, Scalene Triangle. \n"; 
      } 
} 
     else if(angleC > 90){ 
     cout << "This angle is Obtuse, angle C is greater than 90.."; 
     cout << "Please enter the side lengths now\n"; 
     cout << "Side 1:\n"; 
     cin >> sideA; 
     cout << "Side 2:\n"; 
     cin >> sideB; 
     cout << "Side 3:\n"; 
     cin >> sideC; 
        if (sideA == sideB){ 
        cout << "This is an Obtuse, Isosceles Triangle. \n"; 

      } 
     else if(sideA == sideC){ 
       cout << "This is an Obtuse, Isosceles Triangle. \n"; 
      } 
     else if(sideB == sideC){ 
       cout << "This is an Obtuse, Isosceles Triangle. \n"; 
      } 
     else{ 
       cout << "This is an Obtuse, Scalene Triangle. \n"; 
      } 
} 
     } 




//scalene, obtuse, acute 
return 0; 
} 

所以我可能不知道我在做什么,我是一个可怕的程序员什么的哈哈,但这里是我所得到的,当我把这个信息: 信息:角度是40,114,26 ..它认为这是对的,这是正确的,然后它要求的边长也是我打算做的。然后我把第一边的长度(6.4)并且程序跳到最后一次我按回车。我可能犯了一个我无法找到的语法错误,或者如果语句错误,我使用了这种方式。如果你能帮助这个混乱,将不胜感激! (开始研究C++的晚上,并希望将其应用到真实的东西是这个怪物是如何产生的。)Examle of Proper Output ... Example of Wrong Output

+1

你有一个逻辑错误。程序编译并链接正常。在语法错误的情况下,程序不会编译 – Nandu

+0

@Nandu哦好吧,谢谢你,我会更新这个问题。 – Noah

+0

欢迎来到Stack Overflow。我无法重现您的错误。当你编写代码时,从小而简单的工作开始,这是一个好主意,然后再逐步增加一点复杂性,在每一步都进行测试。这样你就不会在一个巨大的程序中寻找一个可能在任何地方的错误。如果你真的那么做了,试着将代码简化成一个[最小完整的例子](http://stackoverflow.com/help/mcve),这是产生错误的最简单的例子。这会让狩猎更容易,对你和我们来说都是如此。 – Beta

回答

0
int sideA, sideB, sideC, angleA, angleB, angleC, longest, middle, shortest, sumbc, sumac, sumab; 

您的变量全部被typeint。这些只有整数。你可能想的类型是floatdouble,这是浮点类型,可容纳实数:

double sideA, sideB, sideC, angleA, angleB, angleC, longest, middle, shortest, sumbc, sumac, sumab; 

你开始使用这些类型之后,你将不得不与这些线路的问题:

if(angleA + angleB + angleC == 180) 
if(angleA == 90) 

问题是,即使您输入的值可能会在纸张上添加到180,在计算机中,50.0 + 50.0 + 80.0可能等于179.999992或类似的值。请参阅What every programmer should know about floating point math

您确定这三条if语句中的一条总是会评估为true

if(sideA > sideB && sideA > sideC){ 
     longest = sideA; 
     cout << "Side 1 is the hypotenuse!\n"; 
    } 
    else if(sideB > sideA && sideB > sideC) { 
     cout << "Side 2 is the hypotenuse\n"; 
     longest = sideB; 
    } 
    else if(sideC > sideA && sideC > sideB){ 
     cout << "The hypotenuse is Side 3\n"; 
     longest = sideC; 
    } 

如果没有,longest不会有过分配一个值,你会得到意想不到的效果。

你的代码还有其他问题,但我停止看这一点。祝你好运。

+0

最长仅适用于直角三角形。那么它是否需要一个值,如果它只适用于三角形是直角三角形?而且由于我的工作很快,而且我的知识非常有限,所以我确信这个计划的很少一部分是正确的或有效的。 – Noah

0

短的问题是,你想放放漂浮/加倍到一个整数。当你混合类型时,cin不喜欢它。如果你输入字母'a',也会发生同样的情况。尝试使用浮动而不是整数。

编辑:澄清我的意思是让你的侧面和角度变成浮动。只要我没有输入带小数点的数字,该程序就可以为我工作。

+0

我还没有了解“浮点”数据类型,并解决了它似乎的问题。浮点数是什么,我应该总是使用低位数十进制数? – Noah

+0

取决于你需要什么。浮动和双打可以但不总是有小数位。这取决于号码的大小。我强烈建议现在查看,因为浮动四舍五入会导致你的错误,这将让你搜索几天。 – soulsabr