>백엔드 개발 >C++ >`cin`을 사용한 후 `getline`에서 입력 메시지를 표시하지 않는 이유는 무엇입니까?

`cin`을 사용한 후 `getline`에서 입력 메시지를 표시하지 않는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 06:48:10602검색

Why Doesn't `getline` Prompt for Input After Using `cin`?

getline이 입력을 요청하지 않음

코드에서 getline(cin, mystr);을 호출하면 프로그램이 다음 메시지를 표시하지 못합니다. 입력용 사용자입니다. 이는 이전에 cin >> 이름; 그리고 cin>> i;, 사용자가 응답을 입력한 후 입력한 개행 문자가 입력 버퍼에 남아 있습니다.

공백 구분

>> 연산자는 공백으로 구분됩니다. 이는 사용자가 데이터를 입력한 후 Enter 키를 눌렀을 때 개행 문자가 변수에 저장되지 않고 입력 버퍼에 남아 있음을 의미합니다.

getline의 동작

getline도 공백으로 구분됩니다. getline을 호출하면 입력 버퍼에서 개행 문자를 검색합니다. 줄 바꿈 문자가 이미 버퍼에 있으므로 getline은 찾고 있는 내용을 즉시 찾고 사용자에게 입력하라는 메시지를 표시하지 않습니다.

해결책

이 문제를 해결하려면 , 다음 방법 중 하나를 사용할 수 있습니다.

  1. 전화 무시: >> getline을 호출하고 cin.ignore()를 호출하여 입력 버퍼에서 개행 문자를 지웁니다.
  2. getline만 사용: >>를 사용하는 대신 모든 사용자 입력에 getline을 사용하세요. stringstream을 사용하여 문자열 입력을 원하는 데이터 유형으로 변환합니다.

향상된 코드:

다음은 getline만 사용하는 향상된 코드 버전입니다.

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() {
    string name;
    int age;
    float price;

    cout << "Hello World!" << endl;
    cout << "What is your name? ";
    getline(cin, name);
    cout << "Hello " << name << endl;
    cout << "How old are you? ";
    getline(cin, age);
    cout << "Wow " << age << endl;

    cout << "How much is that jacket? ";
    getline(cin, price);
    stringstream(price) >> price;
    cout << price << endl;
    system("pause");

    return 0;
}

위 내용은 `cin`을 사용한 후 `getline`에서 입력 메시지를 표시하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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