더 복잡한 객체와 CIN :표준 : 내가 처음 몇 줄을 설명하고 몇 가지 다채로운 라인을 설명하는 텍스트 파일이
1 2 3 4
5 6 7 8
9 10 11 12
red 1 0 0 1 2 3 4
green 0 1 0 5 6 7 8
blue 0 0 1 9 10 11 12
는 각 섹션의 행의 수는 실행시에
알 수없는입니다
을
나는 이러한 구조체의 std::cin >>
연산자를 오버로드 :
struct Point { int x, y; }
struct Line { Point a, b; }
struct Color { float r, g, b; std::string name; };
struct ColorfulLine { Line line; Color color; };
(전체 예 여기 : http://ideone.com/bMOaL1이 [이미 작동 - 편집 전열에 따라 pted 답]) 지금은 Lines
및 ColorfulLines
을 사용하여 파일을 반복 할 필요가
: 여기
Line line;
while(cin >> line) { cout << "We've got a line!\n"; }
ColorfulLine color_line;
while(cin >> color_line) { cout << "We've got a colorful line!\n"; }
// actually I'm putting them into std::lists but I skipped this part for simplicity
그리고
문제입니다 - 화려한 라인, 즉 두 번째 루프가 실행되지 않습니다를 가져온 적이 없습니다.std::cin
시도가 4 선을 가져올 때
, 그것은 때문에 대신 문자열 "빨간색"거기에 다수의 실패
나는 가정 이유는하지만 그것을 해결하는 방법을 모르는 일이 발생있다.
두 번째 while 루프에서 std :: cin은 문자열 (Color.name)을 읽으려고 시도하지만 숫자를보고 실패합니다.
첫 번째 루프가 실패하면 두 번째는 "빨간색"문자열에서 읽기 시작하지만 ColorfulLines 섹션 앞에 임의의 단어를 넣으려고했습니다.
해결 방법?
설명과 함께 제 1 루프 휴식 후 오류 상태를 리셋한다. –
나는 downvote하지 않았지만 직접 질문 대신 오프 사이트에서 관련 코드를 게시했기 때문에 내기를 걸었습니다. (나중에 이것을하지 말아라.) – ildjarn
@ildjarn 관련 코드가 모두 문제가된다. 필자는 불필요한'>>'연산자 오버로드를 생략했다. (물론 int main과 co.). 내가 잘못? 나는 여기서 가장 중요한 부분만을 남겨 두는 것이 좋을 것이라고 생각했다. –