반응형
C++에는 getline함수가 두 종류가 있다.
<istream>에 속한 cin.getline 함수와 <string>에 속한 getline 함수
✅ iostream의 cin.getline()함수
cin.getline(char str, streamsize n);
cin.getline(char str, streamsize n, char dlim);
- C언어 스타일의 문자열을 입력 받을 때 사용 (char형 배열, 문자열의 끝이 널문자)
- 크기 n을 지정하면 (n-1)개의 문자를 읽어와 str 배열에 저장 (마지막은 널문자)
- 지정한 delimiter를 만나기 전까지 모든 문자를 읽어서 str 배열에 저장 (디폴트 구분자는 개행 문자)
✅ string의 getline()함수
getline(istream& is, string str);
getline(istream& is, string str, char dlim);
- 입력 가능한 최대 문자 수를 지정하지 않아도 된다.
- 지정한 delimiter를 만나기 전까지 모든 문자를 읽어서 string 객체에 저장 (디폴트 구분자는 개행 문자)
⚠주의사항
cin은 개행 문자를 버퍼에 그대로 남겨 두기 때문에, 아래 예시처럼 연이어서 바로 다음 입력을 받을 때 버퍼에 있던 개행 문자가 그대로 입력돼버리는 문제가 발생한다.
#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;
}
입력
Hello
World
출력
a: Hello
b:
c: World
그러므로 입력 버퍼를 비워주는 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;
}
입력
Hi
Hello World
Nice
출력
a: Hi
b: Hello World
c: Nice
반응형
'Language & Framework & GIT > C++' 카테고리의 다른 글
[씨앤씨뿔] isdigit 함수 : <locale> - 2 (0) | 2023.04.27 |
---|---|
[씨앤씨뿔] toupper & tolower함수 : <locale> -1 (0) | 2023.04.27 |
[씨앤씨뿔]C++ / 객체 포인터 &배열 &동적 생성 - 2 (0) | 2023.04.26 |
[씨앤씨뿔]C++/ 객체 포인터& 배열& 동적 생성 - 1 (0) | 2023.04.24 |
[씨앤씨뿔]C++/ 클래스 & 객체 - 2 (1) | 2023.04.19 |
댓글