2015-01-13 3 views
0

이 코드는 배열 또는 STL 컨테이너의 대용품으로 사용자 정의 데이터 구조 (스택 유형)를 사용하여 매우 긴 사용자 유형 번호를 저장해야합니다. 과부하를하려고합니다 >> 연산자가istream 입력에서 한 번에 한 문자 씩 읽음

LongInt int1; 
cin>>int1; 

이 작동합니다.

내 코드 :

istream& operator>> (istream& input, LongInt& number) //class name is LongInt 
{ 
    char c; 
    int a; 
    while (input>>c){ // read one number at a time 
     a=c-'0'; // converting the value to int 
     number.stackli.push(a); // pushing the int to the custom stack 
    } 

    return input; 
} 

사용자가 자신의 번호를 입력하고 입력 누른 후 종료, 대신에 무한 루프를 초래한다. 루프 내부의 두 줄을 주석 처리하면 여전히 무한 루프가 발생합니다. 이 문제를 해결하는 방법에 대한 제안은 매우 높이 평가 될 것입니다.

+0

샘플 입력을 추가하십시오하고 [MCVE] (http://stackoverflow.com/help/ :

대신 전체의 입력 스트림에서 단 일부를 소비하려면 뭔가를해야합니다 mcve). –

+1

"은 사용자가 전화 번호를 입력하고 Enter 키를 누른 후에 종료해야합니다."- 코드에 표현 된 기대치는 어디입니까? (힌트 - 그렇지 않다)'input >> c'는 스트림이나 히트 엔드 파일에 에러가 생길 때까지 true를 반환한다. –

+0

input.get (c) –

답변

0

(input >> c)inputgood 상태, 말하자면 닫히지 않은 한 무한 루프이므로 항상 true이 될 것이기 때문입니다.

아무 것도 입력하지 않아도 루프는 "종료 됨"대신 "차단됨"입니다.

while(input >> c) { 
    if(c<='0' || c>='9') { 
     // "c" is not the character you want, put it back and the loop ends 
     input.putback(c); break; 
    } 
    ... 
} 
관련 문제