2010-11-20 2 views
2

문자열 스트림의 모든 값을 일부 데이터 유형에 입력 할 수있는 while 루프가 있습니까?stringstream에서 값 입력

stringstream line; 
while(/*there's still stuff in line*/) 
{ 
    string thing; 
    line >> thing; 
    //do stuff with thing 
} 

답변

2

예 : 예를 들어 스트림을 반환

std::stringstream line; 
std::string thing; 
while (line >> thing) 
{ 
    // do stuff with thing 
} 

if (line.fail()) 
{ 
    // an error occurred; handle it as appropriate 
} 

스트림 작업 (>> 같은); 다음과 같이 스트림 작업을 연결할 수 있습니다.

line >> x >> y >> z 

스트림을 부울로 사용할 수 있습니다. 스트림이 양호한 상태 인 경우 (즉, 데이터를 읽을 수있는 경우), 값은 true으로 평가됩니다. 그렇지 않으면 false으로 평가됩니다. 이것이 스트림을 루프의 조건으로 사용할 수있는 이유입니다.

스트림이 양호한 상태가되지 않는 데에는 여러 가지 이유가 있습니다.

그 중 하나는 스트림 끝에 도달했을 때입니다 (테스트 line.eof()로 표시). 분명히 스트림에서 모든 데이터를 읽으 려한다면이 작업이 완료되면 스트림이 있어야한다고 생각하는 조건입니다.

스트림이 양호한 상태가되지 않는 다른 두 가지 이유는 내부 오류가 있거나 스트림 작업이 실패한 경우입니다 (예를 들어, 정수를 추출하려고 시도하지만 스트림의 다음 데이터는 그렇지 않습니다. 정수를 나타냄). 이 두 가지는 모두 line.fail()으로 테스트됩니다.

+0

나를 두들겨라, 나는 아직도 타이핑하고 있었다! '+ 1' – sbi

+0

'for (문자열 것; line >> thing;) (use (thing); }'우리 루프 중 하나에서 조건이 실패하면 line.fail()이 true가됩니다. 스트림이 여전히 끊어지지 않도록 루프를 끊어야합니다. 왜냐하면! stream.fail()은 stream.good()와 동일하지 않기 때문에 좋은 것을 사용하는 것에주의하십시오. –