[C++] getline()

Kim Yuhyeon·2022년 8월 8일
0

C++

목록 보기
19/25

1. cin.getline()

std::istraeam::getline

istream& getlilne(char* s, streamsize n);
istream& getline(char* s, streamsize n, char delim);
  • s : C 형식 문자열을 저장할 배열을 가리키는 포인터
  • n : 저장할 문자의 최대 개수 (끝의 종료 널 문자를 포함한 값)
    만약 입력 스트림의 최대 크기에 도달하여 입력이 중단되면 failbit 플래그 설정
  • delim : 제한자로 이 문자에 도달시 추출이 중단됨. 이 때 이 문자는 s에 기록되지는 않지만 스트림에서 사라진다.
  • n-1개의 문자만큼 읽어와서 s에 저장
  • delim 을 별도로 지정하지 않으면 엔터('\n')로 인식하기 때문에 n 이 클 경우 s 에는 한 줄이저장된다.
  • delim을 지정하면 그 제한자(delim) 문자 직전까지 읽어다가 s 에 저장한다.

사용 예시

#include <iostream>

int main(){
	char greeting[100];
    cout << "say sth: ";
    cin.getline(greeting, 10); // 10자를 입력받아 greeting 변수에 저장 (마지막은 항상 \0 => 실질적으로 9자 저장)
    cout << "greeting console: " << greeting << "\n";
   
}

2.getline()

std.getline(string)

istream& getline(istream& is, string& str);
istream& getline(istream& is, string& str, char delim);
  • is : 입력 스트림 오브젝트 (ex. cin)
  • str : 입력받은 문자열을 저장할 string 객체
  • delim : 제한자로 이 문자에 도달 시 추출이 중단됨. 이 떄 문자는 s에 기록되지 않지만 스트림에서 사라진다.

사용 예시

#include <iostream>
#include <string>

int main(){
	string greeting;
    getline(cin, greeting);
    cout << "greeting console: " << greeting << "\n";
   
}

주의할 점

cin

cin은 입력값의 기준을 띄어쓰기, 엔터, 탭 등으로 나눈다.
때문에 띄어쓰기, 엔터, 탭 등의 문자가 나오면 무시하는 대신 버퍼에 남긴다.

getline()

getline은 엔터('\n')를 무시하지 않고 잡는다.

결론

때문에 cin 이후에 버퍼를 비워주는 함수(cin.ignore())를 실행해서 버퍼를 비워준 후 getline으로 입력을 받아야 한다.

💡 참고 포스팅

C언어 문자열 istream::getline()과 C++ string의 getline()! 한 줄 읽는 함수가 두 개?

0개의 댓글