>백엔드 개발 >C++ >`>>`를 사용한 후 루프에서 getline()이 예기치 않게 동작하는 이유는 무엇입니까?

`>>`를 사용한 후 루프에서 getline()이 예기치 않게 동작하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-25 16:51:12334검색

Why Does getline() Behave Unexpectedly in a Loop After Using `>>`? 
>`? " />

C의 getline() 및 콘솔 입력

C에서 getline() 함수는 일반적으로 스트림에서 텍스트 한 줄을 추출하는 데 사용됩니다. 그러나 루프에서 여러 번 사용하면 동작할 수 있습니다. 예기치 않게 발생했습니다.

문제:
문자열의 경우 getline()을 사용하고 정수 및 복식의 경우 >>을 사용하여 사용자 입력을 수집하려고 하면 사용자가 첫 번째 문자열을 입력할 수 없습니다. 대신 콘솔 커서는 두 번째 getline() 이후의 다음 입력 프롬프트로 이동합니다. call.

설명:
이 문제는 getline() 및 >> 연산자를 혼합하여 발생합니다. 공백이 아닌 문자. 그러나 입력 스트림에 개행 문자(n)가 남습니다.

다음에 getline()이 호출되는 경우 >>, 개행 문자를 빈 문자열로 읽어서 원하지 않는 동작을 초래합니다.

해결책:

  1. 연산자 사용 > ;> 일관되게: >>를 사용하여 모든 입력을 처리할 수 있다면 이를 준수하세요. 메서드.
  2. getline()을 일관되게 사용하세요. 입력에 문자열이나 여러 유형이 혼합된 경우 getline()만 사용하고 검색된 문자열에서 숫자를 구문 분석하세요. 이는 스트링스트림이나 Boost와 같은 라이브러리를 사용하여 수행할 수 있습니다.
string line;
getline(cin, line);
int value = stoi(line); // Parse the number from the string

위 내용은 `>>`를 사용한 후 루프에서 getline()이 예기치 않게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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