std::getline()은 일부 형식화된 추출 후에 입력을 건너뜁니다. 다음 코드에서 이 오류를 간단히 확인할 수 있습니다. -
예시 코드
#include <iostream> #include <string> using namespace std; int main(){ string name; string city; if (cin >> name && getline(cin, city)){ cout << "Your name " << name << " and city " << city; } }
출력
Amal Your name Amal and city
프로그램이 두 번째 입력을 받지 않는 것을 볼 수 있습니다. 때로는 두 번째 입력이 필요할 수 있지만 출력에서는 첫 번째 입력만 표시됩니다. 이제 문제는 왜 이런 행동을 하는지입니다.
이 문제의 주된 이유는 첫 번째 문자열을 작성할 때 Enter 또는 Return 버튼을 누르고 있기 때문입니다. Enter 또는 Return 키를 누르면 현재 줄 뒤에 '\n' 문자가 삽입됩니다. 이 캐릭터가 문제를 일으키고 있습니다. 문자열의 다음 부분을 무시합니다.
이름이 "Amal"이면 내부적으로는 "Amal\n"이 됩니다. 이 문제를 극복하기 위한 한 가지 옵션은 첫 번째 추출 후에 std::cin.ignore()를 호출하는 것입니다. 그런 다음 사용 가능한 다음 문자를 버리므로 제대로 작동합니다.