computer_study

[c++] 문자 입력 방법 ( get line( ) ) 본문

알고리즘/개념정리

[c++] 문자 입력 방법 ( get line( ) )

knowable 2020. 8. 11. 23:42

getline함수의 역할

 

getline함수를 단순히 얘기하면 입력된 문자열을 받아오는 것이다.

이러한 getline 함수에는 두가지 종류가 있다.

 

 

 

1.  cin.getline()

 

char*형의 문자열을 받을 경우 사용할 수 있다.

#include <iostream>
using namespace std;

int main(){
    
    char test[10];
    
    cin.getline(test,10);
    cout << test << endl;
    return 0;
}

이때, 마지막 칸은 '\n'을 위해 남겨둔다.

예를들어 0,1,2,3,4,5,6,7,8,9를 입력했다면 0부터 8까지만 저장이 되고 마지막 test[9]에는 '\n'이 들어가는 것이다.

 

char형 대신 string형을 사용한다면 오류가 발생한다.

 

 

 

 

 

2.  getline(string)

 

cin.getline()과는 반대로 string형을 받을 경우 사용한다.

c++에서 일반적으로 입력을 받을 경우, scanf나 cin을 사용하는데, getline은 공백이 포함된 문자열을 입력받기 편리하다.

#include <iostream>
#include <string>
using namespace std;

int main(){
    
    string test;
    
    getline(cin,test);
    
    cout << test << endl;
    return 0;
}

 

일반적으로 cin은 공백 입력 시 그를 구분자로 생각해 입력을 받지 않는다.

ex) 'a b c'를 입력했다면 a만 입력된다.

 

getline(string)을 사용하면 '\n'을 구분자로 사용하여 문자열을 입력받는다. 이후 '\n'를 버퍼에서 지운다. 즉, '\n'를 받아들인다.

이와 반대로 cin은 '\n', '띄어쓰기', 'tab'를 구분자로 사용하며 버퍼를 지우지 않기 때문에, cin 이후 getline을 사용한다면 cin,ignore()과 같은 함수를 사용하여 버퍼를 비워주어야된다. (아니면 엔터를 입력값으로 받는다.)

 

cin만을 사용한다면, cin에 공백 무시 함수가 구현되어있기 때문에, 버퍼에 공백이 남아있더라도, 무시하고 입력받는다.

 

 

Comments