이 글은 C++에서 키보드로 입력받는 방법들을 정리한다. c언어 라이브러리 입력은 제외했다.
1. cin 함수
주요 특징
- <iostream> 헤더파일에 정의되어 있는 함수이다.
- 표준 입력 스트림에서 공백, 줄바꿈 문자인 (white-space character) 이전까지의 값만 받는다.
- 공백, 줄바꿈 이전의 문자까지만 입력받기 때문에 표준 입력 스트림에 white-space character가 그대로 남아 있다.
- 따라서 공백이나 줄 바꿈이 포함된 입력을 받을 때 사용할 수 없다.
💡 white-space character란? ' ', '\n', '\t' 등등
#include <iostream>
using namespace std;
int main()
{
int input; //"Kim Jun seo" 입력
cin >> input; //input에는 "Kim"만 저장된다.
}
cin에서 궁금했던점
Q. 공백, 개행문자가 버퍼에 남아있다면 다음 cin 입력 시에 어떻게 인식될까?
A. 아니다. cin은 입력받을 때 선행 공백, 줄 바꿈 문자 등을 무시한다. 공백이 아닌 첫 번째 문자에 도달하면 읽기 시작한다.
2. getline() 함수
getline 함수는 두 가지가 있다. <iostream>의 cin.getline(), <string>의 getline()
getline() 함수는 특정 문자(제한자)가 입력되기 전까지 모든 문자를 입력받는다.
- 제한자는 별도로 지정해주지 않는다면 '\n' 개행문자가 제한자가 된다.
<iostream>에서의 cin.getline()
- C-string 방식의 char []로 구성된 문자열에 입력받을 때 사용한다.
- 최대 입력수에 \0도 포함된다는 걸 명심해야 한다.
- string 방식과 다르게 앞에 cin이 붙는다.
형식
💡cin.getline(배열의 시작 주소(포인터), 최대 입력수, 만나면 입력을 종료할 문자(제한자))
#include <iostream>
using namespace std;
int main()
{
char arr[10];
cin.getline(arr, 10, \n);
}
ex) cin.getline(arr, 3, 4); 에 대한 입력: 123456 | cout << arr;에 대한 출력 : 12 //3개만 입력받기에 1 2 \0
ex) cin.getline(arr, 10, 5); 에 대한 입력: 123456789 | cout << arr;에 대한 출력 : 1234 //5 이전까지의 문자열
<string>에서의 getline()
- 위의 cin.getline()과 동작은 거의 비슷하나 string을 사용한다는 점에서 다르다. 따라서 입력받을 수 있는 문자 수가 없다.
- 이 또한 지정한 특정 문자를 만나기 전까지 문자열을 입력받는다.
- 앞에 cin이 없다. 왜냐하면 getline함수의 매개변수로 입력스트림을 입력하는 부분이 있기 때문이다.
형식
💡getline(입력 스트림, string 객체, 만나면 입력을 종료할 문자(제한자))
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin, string, \n);
}
getline() 유의할 점
cin으로 선행을 입력이 이루어지면 \n가 버퍼에 남아있게 되는데 이때 getline의 제한자를 \n으로 하여 입력받으면 버퍼의 \n을 보고 바로 입력이 종료되어 버린다.
따라서 이런 경우에는 cin.ignore()로 버퍼를 초기화시켜준 뒤 getline으로 입력받아야 한다.
3. cin.get()
- 버퍼의 하나의 문자를 입력으로 받아온다.
- 어떤 문자던 다 받을 수 있다. 공백, 개행 문자 등의 white-space character도 상관없다.
#include <iostream>
using namespace std;
int main()
{
char input;
input = cin.get();
}
4. cin.ignore() 사용경우 총정리
cin.ignore()는 입력버퍼를 싹 비워주는 역할을 한다.
cin 이후에 개행, 공백문자가 남아있을 수 있기에 적절히 사용해야 한다.
-> : 이후 입력을 의미한다.
cin -> cin | cin은 입력받을때 선행 공백, 줄바꿈 문자등을 무시한다. 따라서 사용하지 않아도 된다. |
cin -> getline() cin -> cin.getline() |
cin을 입력받으면 \n가 버퍼에 남아있게된다. 이때 getline()을 사용하면 버퍼에 남아있는 \n을 인식하기에 사용해야한다. |
getline() -> getline() | \n을 제한자로 getline()으로 입력을 받으면 버퍼에 \n가 들어가지 않는다. 따라서 사용하지 않는다. |
위 내용은 운영체제별 개행문자 차이, 컴파일러에 따라 다를 수가 있다.
'👨💻 Programming > C++' 카테고리의 다른 글
[C++] STL string(문자열) 클래스 사용법 총 정리 (0) | 2024.03.24 |
---|