Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

형식화된 추출 후 std::getline()이 입력을 건너뛰는 이유는 무엇입니까?

<시간/>

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()를 호출하는 것입니다. 그런 다음 사용 가능한 다음 문자를 버리므로 제대로 작동합니다.