본문 바로가기
Develop/C++

[C++] cin, getline 함수

by J-rain 2023. 2. 20.

# cin

  • <iostream>에 포함되어 있다.
  • 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다.
  • 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다.
  • 개행 문자를 입력 버퍼에 남겨둔다.
// 정수
int n;
cin >> n;

// 문자열
string str;
cin >> str;

위와 같이 사용이 가능하다.
이때 hello 같은 문자열이라면 문제 없이 입력을 받지만 Hello World!와 같이 띄어쓰기가 포함된 문장이라면 Hello 까지 밖에 입력이 되지 않을 것이다.
cin의 >> 연산자에서는 공백문자에서 입력을 끊기 때문인데, 이러한 문제를 해결하기 위해서 getline()이라는 함수를 사용한다.

 

# getline()

getline()함수는 두 가지가 존재하는데 각가 다른 라이브러리에 존재한다. istream 라이브러리에 속한 cin.getline()함수와 string 라이브러리에 속하는 getline()함수가 있다.

  • istream 라이브러리의 cin.getline()
    • 문자 배열이며 마지막 글자가 ‘\0’(terminator)인 c-string을 입력 받는데 사용
    • n-1개의 문자 개수만큼 읽어와 str에 저장 (n번째 문자는 NULL(‘\0’)로 바꾼다.)
    • 세 번째 인자인 delim은 별도로 지정해주지 않으면 엔터(‘\n’)로 인식
    • delim을 지정해주면 그 제한자(delim)문자 직전까지 읽어서 str에 저장
cin.getline(char* str, streamsize n);
cin.getline(char* str, streamsize n, char dlim);

cin.getline(변수 주소, 최대 입력 가능 문자수, 종결 문자);
ex) cin.getline(str, 100);

  • string 라이브러리의 getline()
    • 최대 문자 수를 입력하지 않아도 됨.
    • 원하는 구분자(delimiter)를 만날 때 까지 모든 문자열을 입력 받아 하나의 string 객체에 저장
getline(istream& is, string str);
getline(istream& is, string str, char dlim);

getline(입력스트림 오브젝트, 문자열을 저장할 string객체, 종결 문자);
ex) getline(cin, str);

 

 

 

주의할점

 

#include <iostream>
using namespace std;

int main() {
	char a[100], b[100], c[100];
	cin >> a; // cin은 버퍼에 엔터가 남아있음.

	// getline 함수는 버퍼에 엔터 포함X
	cin.getline(b, 100); 
	cin.getline(c, 100);

	cout << "a: " << a << endl;
	cout << "b: " << b << endl;
	cout << "c: " << c << endl;

	return 0;
}

실행결과

cin은 개행 문자를 버퍼에 그대로 남겨 두기 때문에, 위의 예시처럼 연이어서 바로 다음 입력을 받을 때 버퍼에 있던 개행 문자가 그대로 입력돼버리는 문제가 발생한다.

따라서, 입력 버퍼를 비워주는 cin.ignore() 함수를 사용해야 한다.

#include <iostream>
using namespace std;

int main() {
	char a[100], b[100], c[100];
	cin >> a; // cin은 버퍼에 엔터가 남아있음.
	cin.ignore(); // 입력 버퍼 비우기

	// getline 함수는 버퍼에 엔터 포함X
	cin.getline(b, 100); 
	cin.getline(c, 100);

	cout << "a: " << a << endl;
	cout << "b: " << b << endl;
	cout << "c: " << c << endl;

	return 0;
}

실행결과

 

 

# cin.get()

  • 표준 입력 버퍼에서 문자를 하나만 가져온다.
  • 문자 하나만 입력이 가능하며 공백과 개행도 입력으로 포함한다.
char ch1, ch2;
ch1 = cin.get();
ch2 = cin.get();

 

'Develop > C++' 카테고리의 다른 글

[C ++] r-value 참조  (0) 2023.02.20
[C ++] 변환 생성자  (0) 2023.02.04
[C ++] 복사 생성자  (0) 2023.02.04
[C ++] 상수형 메소드  (0) 2023.02.03
[C ++] 생성자와 소멸자  (0) 2023.02.03

댓글