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