>백엔드 개발 >C++ >`cin`의 추출 연산자를 사용한 후 `getline()`이 작동하지 않는 이유는 무엇입니까?

`cin`의 추출 연산자를 사용한 후 `getline()`이 작동하지 않는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-11 15:51:02179검색

Why Doesn't `getline()` Work After Using `cin`'s Extraction Operator?

getline() 동작 이해

C의 getline() 함수는 개행 문자가 나올 때까지 표준 입력에서 문자를 읽는 데 사용됩니다. 마주쳤다. 그러나 개발자는 cin의 추출 연산자(>>) 다음에 getline()을 사용할 때 예기치 않은 문제에 직면할 수 있습니다.

문제 설명

사용자는 자신의 코드가 getline()을 사용하여 사용자 제공 메시지를 캡처하려고 시도할 때 사용자 입력 수신을 일시 중지하지 않습니다. 근본 원인은 cin 추출 연산자의 동작과 관련이 있습니다.

해결 방법: 줄 바꿈 문자 플러시

cin의 추출 연산자를 사용하여 데이터를 읽은 후 줄 바꿈 문자가 남습니다. 입력 버퍼의 문자(n)입니다. getline()이 즉시 호출되면 이 개행 문자를 발견하고 즉시 읽기를 중지합니다.

이 문제를 해결하려면 getline()을 호출하기 전에 버퍼에서 개행 문자를 플러시해야 합니다. 이는 다음과 같이 cin.ignore()를 사용하여 달성할 수 있습니다.

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);

cin.ignore()를 삽입하면 개행 문자가 삭제되어 getline()이 의도한 대로 사용자 입력을 읽을 수 있습니다. 이 기술을 사용하면 cin 연산자와 getline()이 연속적으로 원활하게 작동합니다.

위 내용은 `cin`의 추출 연산자를 사용한 후 `getline()`이 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.