2011-04-20 3 views
3

나는 코드의이 비트가 :cin을 두 번 읽는 방법?

... 
ComplexNumber C1; 
ComplexNumber C2; 

cout << "Enter a complex number C1:" << endl; 
cin >> C1; 
cout << C1 << endl; 
cout << "Enter a complex number C2:" << endl; 
cin >> C2; 
cout << C2 << endl; 
... 

을하지만은 사용자 입력에 대한 두 번째 시간을 기다릴 것이며, 단순히 내가 제로에 대해 정의한 기본 값으로 C2를 떠나 발견 한로 arg 생성자를 ComplexNumber 클래스에 추가하고 계속 진행합니다.

이 문제에서 발견 된 모든 해결책은 cin >> 대신 getline()을 사용하지만이 할당은 ComplexNumber 클래스에 대해 opperator를 얼마나 잘 오버로드했는지 테스트하는 것이므로 getline 그 목적을 이길 것입니다. 이 작업을 수행하는 다른 방법이 있습니까?

수정 : @ 마틴 당신이 틀렸어! 운영자를 >>로 변경 한 후에 작동합니다.

istream & operator>>(istream & in, ComplexNumber & n) 
{ 
    int inreal=0; 
    int inimag=0; 
    in >> inreal; 
    char plus; 
    in.get(plus); // read the plus sign since it's a char 
    in >> inimag; 
    char i; // DID NOT HAVE THIS LINE AT FIRST 
    in.get(i); // DID NOT HAVE THIS LINE AT FIRST 
    n = ComplexNumber(inreal,inimag); 
    return in; 
} 

정말 고마워요!

저는 포럼에 처음 왔기 때문에 하위 주석에 어떻게 기여할 것인지 잘 모릅니다. 이 게시물의 한 공식 답변에 녹색 체크 만하면됩니다.

+0

[중복 된 [cin을 두 번 사용했을 때의 문제점]. ] (http://stackoverflow.com/questions/2525352/problem-of-using-cin-twice) – wallyk

+2

키보드에서 무엇을 입력 했습니까? (사용자가 누른 반환 및 제어 키 포함). 또한 연산자 >>를 COmplexNumber로 정의한 방법은 무엇입니까? –

+0

테스트하는 중입니까? 입력 : 5 + 9i [입력] 내 인쇄 방법에서 예상대로 C1을 읽은 다음 출력의 나머지 부분 만 실행했습니다. –

답변

1

내가에서 I 문자를 읽어 보지 않았을 내기 입력 스트림

2

cin을 지울 필요가 있습니다. 그것은 이전의 cin에서 'enter'에서 읽는 것입니다.

cin.clear(); 

그리고 나는 또한의 라인을 따라 뭔가를하고 기억

cin.ignore(cin.rdbuf()->in_avail()); 
이 게시물에

더 많은 정보 :

How do I flush the cin buffer?

+0

고맙습니다. 나는 그 글을 읽었지 만,이 코드를 어디에 넣어야할지 모르겠습니다. 나는 cout << C1 라인을 시도했지만 아무 것도 바뀌지 않았다. –

+0

@Liz : 예, 다음 번 'cin'전에 언제든지 맞을 것입니다. –

+0

첫 번째 cin을 읽은 직후, 또는 두 번째 cin을 읽기 전에 바로해야합니다. Cin이 이전 입력에서 입력 (입력)을 읽지 않도록 버퍼를 지우고 있으므로 두 번째 입력을 허용합니다. – Genzume