게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C++ 문자열 문제 질문 좀 부탁드립니다!
게시물ID : programmer_9425짧은주소 복사하기
작성자 : 찌빠묵
추천 : 0
조회수 : 693회
댓글수 : 2개
등록시간 : 2015/04/18 11:31:42
옵션
  • 본인삭제금지
아래 소스에 클래스 선언부는 고치지 않고
 
원의 개수를 입력하고
 
개수만큼 원의 이름과 반지름을 입력(ex. 마우스 5)
 
검색하고자 하는 원의 이름을 입력
 
검색하고자 하는 원의 면적
 
최소면적을 정수로 입력하면 그 면적보다 큰 원들을 검색하는 프로그램을 만들려고 합니다.
------------------------------------------------
문제는 아래 주석처럼 searchByName함수로 들어가면 Circle을 가리키는 포인터p가 기능을 안하는 것 같습니다.
 
그래서 생성자 부분으로 함수의 구현 내용을 다 옮겨서 해보면
 
3명을 입력한다고 하면 2번째 원은 면적이 나오는데 1번째 원은 입력한 원의 이름과 검색한 원의 이름이 같아도 else문으로 빠집니다. 
 
1. 포인터p를 생성자가 아닌 다른 함수에서 사용하려면 (같은 클래스) 어떻게 해야되나요?
 
2. 첫번째 원은 왜 else문으로 빠지나요?
 
 
#include<iostream>
#include<string>
using namespace std;
 
class Circle{
 int radius;  //원의반지름
 string name; //원의 이름
public:
 void setCircle(string name_in, int radius_in); //이름과 반지름 설정
 double getArea(){return radius;}
 string getName(){return name;}
};
 
class CircleManager{
 Circle *p;  //Circle배열에 대한 포인터
 int size;  //배열의 크기
public:
 CircleManager(int size_in);  //size크기의 배열을 동적생성. 사용자로부터 입력완료
 ~CircleManager(){ delete [] p;}
 void searchByName();   //사용자로부터 원의 이름을 받아 면적 출력
 void searchByArea();   //사용자로부터 면적을 입력받아 면적보다 큰 원의 이름 출력
};
 
void Circle::setCircle(string name_in, int radius_in)
{
 name = name_in;
 radius = radius_in;
}
 
CircleManager::CircleManager(int size_in)
{
 size = size_in;
 Circle *p = new Circle[size];  //지역변수?
 for(int i=0; i<size; i++)
 {
  cout<<i+1<<"번 원의 이름과 반지름 : ";
  string N;
  int R;
  getline(cin,N,' ');
  cin>>R;
  cin.ignore();    //버퍼 지움
  (p+i)->setCircle(N,R);
 
 }
 for(int i=0; i<size; i++)  //확인용
 {
  cout<<(p+i)->getName()<<' '<<(p+i)->getArea()<<endl;
 }
}
 
void CircleManager::searchByName()  //함수로 들어오긴 하는데 검색 이름 까진 저장됨 ㅡ p값이 인식이 안되는듯 하다.
{
 string NAME;
 cout<<"검색 할 원의 이름 : ";
 //cin>>NAME;
 getline(cin,NAME,'\n');
 cout<<NAME<<"0"<<endl;  //확인용
 for(int i= 0; i<size; i++)
 {
  cout<<NAME<<"1"<<endl; //확인용
  cout<<(p+i)->getName()<<" p"<<endl; //확인용 - 안됨 p인식 안됨
  string AB = (p+i)->getName();
  if(NAME==AB)  //NAME.compare(AB)==0
  {
   cout<<NAME<<"2"<<endl; //확인용
   cout<<(p+i)->getName()<<"면적은 : "<< ((p+i)->getArea() )*((p+i)->getArea())*3.14 <<endl;
  }
  else
  {
   cout<<NAME<<"3"<<endl; //확인용
  }
 }
}
 
void CircleManager::searchByArea()
{
 int r;
 cout<<"최소 면적을 정수로 입력 하시오 : ";
 cin>>r;
 cout<< r<<"보다 큰 원을 검색합니다."<< endl;
 for(int i=0; i<size; i++)
 {
  if( r < ( ((p+i)->getArea() )*((p+i)->getArea())*3.14) )
  {
   cout<<(p+i)->getName()<<"의 면적은 "<<((p+i)->getArea() )*((p+i)->getArea())*3.14<<endl;
  }
 }
}
 
int main()
{
 cout<<"원의 개수 입력 : ";
 int input_size;
 cin>>input_size;
 CircleManager A(input_size);
 
 A.searchByName();
 A.searchByArea();
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호