private한 멤버변수를 std::cin으로 직접입력이 불가능한가요?

조회수 2523회

private한 멤버변수를 std::cin으로 직접입력이 불가능한가요? 또한 아래의 문제점들은 왜 발생할까요?? 궁금합니다

아래는 class 헤더파일의 전부입니다.

class Bank
{
private:
    int Account; 
    char *Name; //동적할당으로 받을거다.
    int Money;

public:
     //처음 메뉴 결정
    void ShowMenu(void)const; //메뉴를 보여주자.
    void MadeAccount(); //1. 계좌개설
    void InputAccount(); //2. 입금
    void OutputAccount();//3. 출금
    void ShowAllAccount() const; // 4. 모든 계좌 출력
    bool searchID(int id); //아이디 맞는지 확인과정
    ~Bank()
    {
        delete[]Name;
    }
};

아래는 class cpp파일의 일부 입니다.

 void Bank::MadeAccount()


{       cout << "[계좌 개설]" <<endl;
    cout << "계좌ID: ";

    cin >> Account;  //문제발생지점1

    char *name = 0 ;
    cout << "이 름:";

    cin >> name; //문제발생지점2
    Name = new char[strlen(name) + 1];

    int money;
    cout << "입금액:";
    Money = 0;
    cin >> money;
    Money += money;
    }

위에 문제발생지점에서 문제가 발생하고 있습니다.

문제 발생지점1은 이미지

문제 발생지점2는 이미지

위와 같은 문제가 발생하고있습니다... 어떻게 해결하면 좋을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • name에 메모리를 할당하지 않았기 때문에 아래처럼 미리 할당해주시면 됩니다.

     char *name = 0 ;
    

    를 아래와 같이 변경해서 해보세요.

     char *name =  new char[20];
    

    하지만 20이라는 길이를 얼마나 잡을지 모르기 때문에 std::string을 이용해서 문자열을 관리하는것도 하나의 방법이 될것 같습니다.

    private:
        //char *Name;
        string Name;
        ...
    
    void Bank::MadeAccount() {
    ...
    //    char *name = 0 ;
    //    cout << "이 름:";
    //    cin >> name; //문제발생지점2
    //    Name = new char[strlen(name) + 1];
        string name;
        cout << "이 름 : ";
        cin >> name;
        Name = name;
    ...
    }
    
    

    string을 사용한다면 소멸자에서 Name을 delete하는걸 삭제해주시면 됩니다.

    ~Bank()
    {
        //  delete[]Name;
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 너무나도 감사합니다!! 이거땜에 5시간을 고민했는데 오류라고 생각하지 못한부분이었습니다.. 도움을 주셔서 감사합니다! 알 수 없는 사용자 2017.2.25 10:24
    • c++ 어렵습니다ㅠ. 저도 스크립트 언어만 하다가 c++ 다시보니깐 어렵네요 :D 문자열이 다소 까다롭습니다. 알 수 없는 사용자 2017.2.25 10:29

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)