데이터 읽는 방식


cin : cin은 공백이나 개행 문자('\n')를 기준으로 데이터를 구분하여 읽는다.
getline : getline은 개행 문자('\n')를 기준으로 데이터를 읽어온다.

	int age; string name;

	cout << "Enter your age and name : ";
	cin >> age >> name;

	// 예시 입력: 25 John Doe
	// age에는 25가 들어가고, name에는 "John"만 들어가게 됨

	cout << "=====================================" << endl;

	string fullName;

	cout << "Enter your full name: ";
	getline(std::cin, fullName);

	// 예시 입력: John Doe
	// fullName에는 "John Doe"가 들어가게 됨

개행 문자 처리


cin : cin은 개행 문자를 읽고, 버퍼에 남겨둔다.
getline : 개행 문자를 읽은 후, 제거하기 때문에 버퍼에 남지 않는다.

int num;
char ch;

cout << "Enter a number and a character: ";
cin >> num >> ch;

// 예시 입력: 42 A
// num에는 42가 들어가고, ch에는 'A'가 들어가지만 '\n'은 버퍼에 남게 됨

string sentence;

cout << "Enter a sentence: ";
getline(std::cin, sentence);

// 예시 입력: Hello World
// sentence에는 "Hello World"가 들어가게 됨

cin과 getline을 함께 사용하면 생기는 문제


cin 다음에 getline을 사용할 때 발생하는 문제는 주로 개행 문자(‘\n’) 때문이다.
cin으로 데이터를 읽을 때 사용자가 엔터 키를 누르면 개행 문자가 입력 버퍼에 남아 있게 되는데, 이 개행 문자가 getline에 영향을 주게된다.

std::string number;
std::string name;

std::cout << "Enter a number: ";
std::cin >> number;               // 엔터로 입력 종료 후, '\n'가 입력 버퍼에 남아있음

std::cout << "Enter your name: "; // 남아있는 '\n' 때문에 변수에 값을 입력받기 전에 입력 종료
std::getline(std::cin, name);

std::cout << "Number: " << number << std::endl;
std::cout << "Name: " << name << std::endl;

개행 문자가 입력 버퍼에 남아있음

이런 경우, cin.ignore() 함수를 사용하여 ‘\n’를 무시한다.

  // 남은 개행 문자를 무시
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

cin.ignore() 함수를 사용하여 개행 문자를 무시

카테고리:

업데이트:

댓글남기기