C++ 我的代码中有一个错误,可能是语法错误或if语句错误,我找不到。编程新手

C++ 我的代码中有一个错误,可能是语法错误或if语句错误,我找不到。编程新手,c++,if-statement,syntax,C++,If Statement,Syntax,这可能是我的第一个节目。它需要用户输入三角形,然后对它们进行分类,并输出数据所暗示的三角形。我在猜测,事情是如何工作的,只是为了玩C++,但是我遇到了一个问题。我没有从我的程序中得到预期的结果,虽然它们在以前并不完美,但我没有输入边长,而是输入第一个边长,它会自动跳过其他两个边长,并继续代码 #include <iostream> using std::cout; using std::cin; int sideA, sideB, sideC, angleA, angleB, an

这可能是我的第一个节目。它需要用户输入三角形,然后对它们进行分类,并输出数据所暗示的三角形。我在猜测,事情是如何工作的,只是为了玩C++,但是我遇到了一个问题。我没有从我的程序中得到预期的结果,虽然它们在以前并不完美,但我没有输入边长,而是输入第一个边长,它会自动跳过其他两个边长,并继续代码

#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;
}
所以我可能不知道我在做什么,我是一个糟糕的程序员或者什么的,哈哈,但是当我输入这些信息时,我得到的是: 信息:角度是40114,26..它确定它是钝角,这是正确的,然后它要求边长,这也是我打算让它做的。。然后我输入第一个边长6.4,一旦我按下回车键,程序就会跳到末尾。我可能犯了一个找不到的语法错误,或者我使用if语句的方式完全错误。如果你能帮我解决这个问题,我将不胜感激!前几天开始研究C++,想把它应用到真实的东西上,这就是这个怪物是如何被创造出来的…
问题的症结在于,您试图将浮点/双精度转换为整数。cin不喜欢你这样混音。如果你把字母“a”放进去,同样的事情也会发生。尝试使用浮点而不是整数

编辑:澄清一下,我的意思是把你的边和角做成浮点数。只要我没有输入带小数点的数字,这个程序就对我有效

int sideA, sideB, sideC, angleA, angleB, angleC, longest, middle, shortest, sumbc, sumac, sumab;
所有变量都是int。这些变量只包含整数。您可能需要的类型是float或double,这是可以容纳实数的浮点类型:

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.9992或类似的值。看

您确定这三条if语句中的一条总是计算为true吗

如果没有,则不会为longest分配值,您将得到意外的结果


代码中还有其他问题,但我不再考虑这一点。祝你好运。

你有一个逻辑错误。程序编译和链接良好。如果出现语法错误,程序将无法运行compile@Nandu哦,好的,谢谢。我会更新问题。欢迎来到堆栈溢出。我不能重现你的错误。当您编写代码时,最好从一些小而简单、工作完美的东西开始,然后一次增加一点复杂性,在每一步进行测试。这样,您就不会在大型程序的任何地方寻找bug。如果你真的到了那里,试着把代码简化成一个简单的例子,这是产生错误的最简单的例子。对你和我们来说,这将使狩猎更加容易。@Beta好吧,一开始很简单。。当我在几个小时前开始使用它时,它只识别等角三角形,但我试图使它能够通过角度和两边对每种类型的三角形进行分类。我想我会放弃这一点,明天再试一次,记住这个建议-最小编码,当我编码这一点时,我一次只做一点,但我可能没有像我应该做的那样测试每一点代码。@user3739597查看对我答案的编辑。最长只适用于直角三角形。如果它只适用于直角三角形,那么它是否需要一个值?由于我的工作速度很快,而且我的知识非常有限,我确信这个程序中很少有正确或有效的部分。我还没有学习浮点数据类型,这似乎解决了问题。浮点数是我应该一直用于低位数十进制数的吗?取决于你需要什么。浮点数和双精度数可以,但并不总是有小数位数。这取决于数字的大小。我强烈建议您现在就开始研究这个问题,因为浮点取整可能会导致错误,这会让您搜索数天。
    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;
    }