一个c++中的运行问题

博主在使用C++编写继承类代码时遇到问题,当for循环的最后一个输入是'Triangle'时,程序会异常结束而跳过后续输出。当'Triangle'不作为最后一个输入时,程序可以正常执行。已附上代码,寻求社区帮助找出问题所在。
摘要由CSDN通过智能技术生成

待解决的C++问题

大家好,最近在用c++写继承类问题时,代码运行时遇到了以下问题:在for循环中,如果最后一个输入的是Triangle,则程序直接结束,不会进行后面的输出了,找了好久都不知道问题出在哪里。

下面这张图是Triangle放在第二输入时的运行结果图,此时可以执行后面的输出。

在这里插入图片描述
以下这张图是Triangle放在最后输入的结果,程序直接结束,不会执行后面的输出,找了好久都找不到问题所在,哪位大神可以帮忙看看吗?谢谢了

在这里插入图片描述
以下是我完整的代码:

#include<iostream>
#include<stdio.h>
#include<string>
#include<iomanip> 
#include<cmath>
using namespace std;

class Shape       //基类,虚函数 
{
  public:
  	//Shape(){};
  	virtual double area()=0;
    virtual double perimeter()=0; 
};

class Rect: public Shape   //派生类 
{
  private:
  	double length,width;
  public:
  	Rect(double x1,double y1,double x2,double y2)
  	{
  	  length=fabs(x1-x2);
      width=fabs(y1-y2); 
  	}
  	double area()          //函数重定义 
  	{
  	  return length*width;
  	}
  	double perimeter()
  	{
  	  return 2*(length+width);
  	}
};

class Circle: public Shape
{
  private:
  	double R;
  public:
  	Circle(double x,double y,double r)
  	{
  	  R=r;
  	}
    double area()
    {
      double s,pi=3.14159;
      s=pi*R*R;
      return s;
    }
  	double perimeter()
  	{
  	  double pi=3.14159;
      return 2*pi*R;
  	}
};

class Triangle: public Shape
{
  private:
  	double a,b,c,d;
  public:
  	Triangle(double x1,double y1,double x2,double y2,double x3,double y3)
  	{
  	  a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
      b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
      c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
      d=(a+b+c)/2;
  	}
  	double area()
  	{
  	  double s;
      s=sqrt(d*(d-a)*(d-b)*(d-c));
      return s;
  	}
  	double perimeter()
  	{
  	  return d*2;
  	}
};

int main()
{
  int n;
  cout<<"请输入要创建的实例个数:";
  cin>>n;
  double x1,x2,x3,y1,y2,y3;
  Shape *shape;
  string str[3];
  double temp[2][2];
  for(int i=0;i<n;i++)
  {
  	cout<<"请输入要创建何种实例:"; 
  	cin>>str[i];
    if("Rect"==str[i])
    {
    	cout<<"请输入Rect的实际参数值:"; 
      cin>>x1>>y1>>x2>>y2; 
	  Rect re(x1,y1,x2,y2);
	  shape=&re;
    }
    else if("Triangle"==str[i])
    {
    	cout<<"请输入Triangle的实际参数值:";
      cin>>x1>>y1>>x2>>y2>>x3>>y3;
	  Triangle tran(x1,y1,x2,y2,x3,y3);
	  shape=&tran;
    }
    
    else if("Circle"==str[i])
    {
      double r;
      cout<<"请输入Circle的实际参数值:";
      cin>>x1>>y1>>r;
	  Circle cir(x1,y1,r);
	  shape=&cir;
    }
    temp[i][0]=shape->area();
	temp[i][1]=shape->perimeter();
	
    
  }
  cout<<"输出:"<<endl;
  for(int i=0;i<n;i++)
  {
  	cout<<setiosflags(ios::fixed)<<setprecision(5)<<temp[i][0]<<" "<<temp[i][1]<<endl;
  }
  return 0;
} 

希望大家能给给意见,再次谢谢了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值