[질문]c++ 이 코드가 왜 무한루프에 빠지는지 모르겠습니다.
글쓴이: redpig / 작성시간: 수, 2008/11/26 - 11:15오전
#include <iostream>
using namespace::std;
const int NAME_LEN=20;
/*************** account class ***************/
class account {
int id; //계좌번호
int balance; //잔액
char* name; //이름
public:
account() {}
account(int id, char* name, int balance);
account(const account& acc);
~account();
int getID() const; //계좌번호 조회
int getBalance() const; //잔액 조회
void addMoney(int val); //입금
void minMoney(int val); //출금
const char* getName() const;
void showAllData();
};
account::account(int id, char* name, int balance) {
this->id=id;
this->balance=balance;
this->name=new char[strlen(name)+1];
strcpy(this->name, name);
}
account::account(const account& acc) {
this->id=acc.id;
this->balance=acc.balance;
this->name=new char[strlen(acc.name)+1];
strcpy(this->name, acc.name);
}
account::~account() {
delete []name;
}
int account::getID() const {
return id;
}
int account::getBalance() const {
return balance;
}
void account::addMoney(int val) {
balance+=val;
}
void account::minMoney(int val) {
balance-=val;
}
const char* account::getName() const {
return name;
}
void account::showAllData() {
cout<<"계좌ID: "<<id<<endl;
cout<<"이름: "<<name<<endl;
cout<<"잔액: "<<balance<<endl;
}
/*************** accManager class ***************/
class accManager {
account* pArray[100]; //account 저장을 위한 배열
int index; //저장된 account 수
public:
accManager();
void printMenu();
void makeAccount(); //계좌 개설을 위한 함수
void deposit(); //입금
void withdraw(); //출금
void inquire(); //잔액 조회
};
accManager::accManager() {
index=0;
};
void accManager::printMenu() {
cout<<"\n---Menu--------"<<endl;
cout<<"1. 계좌 개설"<<endl;
cout<<"2. 입금"<<endl;
cout<<"3. 출금"<<endl;
cout<<"4. 잔액 조회"<<endl;
cout<<"5. 프로그램 종료"<<endl;
}
void accManager::makeAccount() {
int id;
char name[NAME_LEN];
int balance;
cout<<"계좌 개설--------"<<endl;
getchar();
cout<<"계좌ID: ";
cin>>id;
cout<<"이름: ";
cin>>name;
cout<<"입금액: ";
cin>>balance;
pArray[index++]=new account(id, name, balance);
}
void accManager::deposit() { //입금
int money;
int id; //찾고자 하는 ID
cout<<"계좌 ID: ";
cin>>id;
cout<<"입금액: ";
cin>>money;
for(int i=0; i<index; i++) {
if(pArray[i]->getID()==id) {
pArray[i]->addMoney(money);
cout<<"입금 완료"<<endl;
return;
}
}
cout<<"유효하지 않은 ID입니다."<<endl;
}
void accManager::withdraw() { //출금
int money;
int id;
cout<<"계좌ID: ";
cin>>id;
cout<<"출금액: ";
cin>>money;
for(int i=0; i<index; i++) {
if(pArray[i]->getID()==id) {
if(pArray[i]->getBalance()<money) {
cout<<"잔액 부족"<<endl;
return;
}
pArray[i]->minMoney(money);
cout<<"출금완료"<<endl;
return;
}
}
cout<<"유효하지 않은 ID입니다."<<endl;
}
void accManager::inquire() { //전체 잔액조회
for(int i=0; i<index; i++) {
pArray[i]->showAllData();
}
}
/*************** main function ***************/
enum {MAKE=1, DEPOSIT, WITHDRAW, INQUIRE, EXIT};
int main(void) {
int choice;
accManager manager;
while(1) {
manager.printMenu();
cout<<"선택: ";
cin>>choice;
switch(choice) {
case MAKE:
manager.makeAccount();
break;
case DEPOSIT:
manager.deposit();
break;
case WITHDRAW:
manager.withdraw();
break;
case INQUIRE:
manager.inquire();
break;
case EXIT:
return 0;
default:
cout<<"Illegal selection.."<<endl;
break;
}
}
return 0;
}Quote:
책을 보면서 c++을 공부하는 중인데요.
위 코드를 컴파일해서 실행하면 main() 함수에서 manager.makeAccount();를 호출하고
void accManager::makeAccount() 함수에서 cin>>id; 여기서 아이디를 입력하고 엔터를 치면
cin>>name; 여기서 이름을 입력받도록 대기해야 되는데 그렇지않고 그냥 무한루프에 빠져버리네요.혹시 잘못 코딩했나 싶어서 책 소스를 그대로 가져와서 해봐도 마찬가지입니다.
도데체 뭐가 문제일까요?
Forums:


코드를 올리실때는 < c o d e > < / c o d e > 블럭 안에 넣어주세요 - 스페이스는 빼고 입력하세요
코드를 올리실때는 < c o d e > < / c o d e > 블럭 안에 넣어주세요 - 스페이스는 빼고 입력하세요
---------------------------------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)를 달지말고 원 글에 댓글(comment)로 달아주세요
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
댓글 달기