【发布时间】:2016-02-27 17:00:08
【问题描述】:
所以这可能是我的第一个程序。它接受用户关于三角形的输入,然后对它们进行分类并输出给定的数据所暗示的三角形。我在猜测事情是如何工作的,只是为了玩 c++,但我遇到了一个问题。我现在没有从我的程序中得到预期的结果(尽管它们以前并不完美),而不是输入边长,我输入了第一个边长,它会自动跳过其他 2 个边长并继续使用代码.
#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)和一旦我按下回车,程序就会跳到最后。我可能犯了一个我找不到的语法错误,或者我使用 if 语句的方式完全错误。如果你能帮助解决这个烂摊子,那将不胜感激! (前几天晚上开始研究 c++,想把它应用到真实的东西上,这就是这个怪物是如何被创造出来的......)Examle of Proper Output... Example of Wrong Output
【问题讨论】:
-
你有一个逻辑错误。程序编译和链接很好。如果出现语法错误,程序将无法编译
-
@Nandu 哦,好的,谢谢,我会更新问题..
-
欢迎来到 Stack Overflow。我无法重现您的错误。当您编写代码时,最好先从可以完美运行的小而简单的东西开始,然后一次一点地增加复杂性,在每一步都进行测试。这样,您就不会最终寻找可能存在于大型程序中的任何地方的错误。如果您确实到了那里,请尝试将代码简化为minimal complete example,这是产生错误的最简单示例。这将使您和我们的狩猎变得更加容易。
-
@Beta 嗯,一开始很简单。当我几个小时前开始它时,它只识别等角三角形,但我试图让它能够按角度和边对每种类型的三角形进行分类两个都。我想我会放弃这个,明天再试一次,考虑到这个建议(最少的编码),当我编码这个时,我一次拿一点,但我可能没有尽可能多地测试每一位代码。五。
-
@user3739597 查看我的答案的编辑。
标签: c++ if-statement syntax