[C++] cin / get / getline 차이점

noobie·2024년 2월 7일

cpp

목록 보기
3/3

1) cin

: 개행 문자를 제외한 문자 / 문자열 저장
개행 문자를 입력버퍼에 남겨둔다.
공백이나 개행문자를 입력하면 공백 이전까지의 값만 가져온다.
ex)

    string str;
    cin>>str;
    cout<<str;

-> a b c 를 입력하면 a 만 출력됨

2) getline()

2-1) istream의 cin.getline(char *s, streamsize n, char delim);

문자 배열이면서 마지막 글자가 '\0' 인 c-string을 입력 받는데 사용한다.
s : 문자열을 받을 배열을 가리키는 포인터
n : 저장할 문자의 최대 갯수
delim : 제한자. 지정한 문자가 나타나면 입력을 멈추고, 제한자는 제외하고 저장
(지정하지 않으면 개행문자로 설정됨)

char a[20];
cin.getline(a,15,'.');
cout<<a;

-> abc.def 를 입력하면 abc만 출력됨

2-2) string 라이브러리의 getline(istream& is, string& str, char delim);

is : 문자들이 추출되어질 istream 오브젝트 (입력 받으려면 cin 사용)
str : 입력받을 문자열들이 저장될 string 오브젝트
delim : 제한자

string str;
getline(cin,str);
cout<<str;

-> abc def 를 입력하면 abc def 그대로 출력됨

❗주의 )

int n;
string str;
cin>>n;
getline(cin,str);

-> getline이 실행되지 않음
cin>>n 에서 버퍼에 '\n' (엔터) 가 그대로 남아있기 때문이다.

=> cin.ignore 사용
입력 버퍼의 모든 내용을 제거해줌

int n;
string str;
cin>>n;
cin.ignore();
getline(cin,str);

-> 정상 작동됨

3) cin.get(char* s, streamsize n, char delim);

표준 입력 버퍼에서 문자를 하나만 가져오며,
문자 하나만 입력이 가능하고 공백과 개행도 입력으로 포함한다.

s : 문자열을 받을 배열을 가리키는 포인터
n: 저장할 문자의 최대 갯수
delim : 제한자

    char c1,c2;
    cin.get(c1);
    cin.get(c2);
    
    cout<<c1<<c2;

-> a b 를 입력하면 a 가 출력됨 (c2에 공백이 저장됨)

*a b 를 출력하고 싶으면 : 문자열로 입력받아야 함

char a[4];

cin.get(a,4);
cout<<a;

-> a b 입력하면 a b 그대로 출력됨

profile
개발뉴비 누비 🐣

0개의 댓글