- operator>>
과부하 std::string
에 대한 최초의 선행 공백을 삭제 한 후 다음 공백 또는 사용 가능한 입력의 한쪽 끝까지 읽어 .
"John Smite"를 입력하면 첫 번째 반복에는 "John"이 표시되고 두 번째 반복에는 "Smite"가 표시되고 이후의 반복에는 더 이상 입력이 없습니다. 문제는 읽기를 시도하기 전에 구현이 fullname
을 지우는 것 같습니다. 하지만 스트림이 더 이상 양호한 상태가 아니기 때문에 더 이상 읽을 수 없으며 무한 루프가 있습니다.
당신이 대신 같은 뭔가를 할 수 :
string temp;
string fullname;
do {
cin.clear(); // clear any error flags
do {
if (cin >> temp) fullname += temp + ' ';
} while (cin.good());
} while (fullname.empty());
이것은 인접한 여러 공백 문자를 축소 A (좋은) 부작용이 있지만 여전히 꽤 투박합니다.
훨씬 더 좋은 방법은 죄송
do std::getline(std::cin, fullname); while (fullname.empty());
가 for 루프는 "전체 이름은"무엇 – user1595932
을 오타하지 말 것입니까? – PlasmaHH
fullname은 문자열입니다 – user1595932