기본적으로 문자열 추출 연산자 (>>
연산자)는 모든 공백을 건너 뜁니다. A B C
을 입력하고 개행 문자를 입력 한 다음 D E F
을 입력하면 스트림 추출 연산자를 사용하여 한 번에 하나씩 문자열을 읽으려고하면 "A", "B", "C", "D", " E ","F "는 공백이없고 개행 문자가 없습니다. 당신이 줄 바꿈을 명중 할 때까지 문자열의 무리를 읽으려면
, 당신은 그것을 토큰 화하는 std::istringstream
를 사용 후, 한 줄의 텍스트를 읽을 std::getline
사용을 고려할 수 있습니다 참고로
#include <sstream>
/* Read a full line from the user. */
std::string line;
if (!getline(std::cin, line)) {
// Handle an error
}
/* Tokenize it. */
std::istringstream tokenizer(line);
for (std::string token; tokenizer >> token;) {
// Do something with the string token
}
- 원래 코드에서 일반적으로 다음과 같은 루프가 있습니다.
string toRead;
while (allIsGoodFor(toRead)) {
cin >> toRead;
// do something with toRead;
}
이 방법은 루프를 한 번에 너무 많이 계속 실행하기 때문에 일반적으로 작동하지 않습니다. 특히 조건을 false로 만드는 입력을 읽으면 루프는 지금까지 읽은 것을 계속 처리합니다. 그것은 같은 것을 할 아마 더 좋은 생각 :
while (cin >> toRead && allIsGoodFor(toRead)) {
do something with toRead;
}
Downvoter 시도 : 여기에 내 로직 잘못인가? 이 대답을 개선하기 위해 내가 할 수있는 일이 있습니까? – templatetypedef
이것은 단순히 입력 루프를 작성하는 방법이 아닙니다. –
나는이 ans (+1을 주었다)가 마음에 들지만,'어떤 조건은 toRead에 대해서는 사실이 아니다. ' – Charles