728x90
1. cin.getline(char 배열, 넣을 문자수)
넣을 문자 수만큼만 char 배열에 저장한다.
저장은 각각의 알파벳이 원소 하나하나에 할당됨.
공백도 같이 저장한다.
(cin >> 은 공백 전까지 장, cin.getline()은 공백 포함 개행문자 전까지 저장)
# 넣을 문자 만큼 받는다.
2. getline(cin, string) from #include <string>
getline()은 string에 정의되어 있으며, string 형의 문자열 저장.
# getline(cin, string, ‘특정문자’) : 특정문자 전까지의 문자열을 받는다.
※ 주의사항, cin.ignore()
- 일반적인 cin >> a;와 같이 입력 받고, getline() 혹은 cin.getline()을 사용할 시에는 재대로 동작하지 않는다.
- 이유는, cin >> a; 이후에 개행문자(“\n”)가 입력버퍼에 남아 있기 때문에 이 문자가 getline() 혹은 cin.getline()에 입력으로 들어가기 때문이다.
# 에러상황
- 출력에서 2다음에 빈 공간이 보인다. 이것은 개행문자가 s에 입력된 것이다.
- 2를 num으로 받고, 그 다음에 getline()을 수행시 개행문자(“\n”)가 입력버퍼에 남아있어 s에 들어간다.
# 해결방법, cin.ignore()를 통해 입력버퍼 비우기
- 2를 num에 입력받고, clear도 s에 잘 입력받은 모습을 볼 수 있다.
그럼 언제 cin.ignore()를 해서 입력버퍼를 비워줘야 할까?
- 딱 2가지이다.
- 1) cin >> a; 와 같이 일반적인 입력.
- 2) a = cin.get(); 상황시
- 일반적인 cin >> a;와 같이 수행하고, getline() 혹은 cin.getline()을 수행할 때에만 해주면 된다.
- 즉, getline() 간에나, cin.getline() 간에는 입력버퍼에 개행문자(“\n”)이 저장되지 않아 상관없음.
# 1. getline() <-> getline() 문제 없음.
- s1 = ‘a b c’, s2 = ’d e f’ 가 문제없이 입력됨.
# 2. getline() <-> cin.getline() 문제 없음.
- s1 = ‘a b c’, a = ’d e f’ 가 문제없이 입력됨.
# 3. cin.getline() <-> cin.getline() 문제 없음.
728x90
'C++ > 라이브러리 (STL etc)' 카테고리의 다른 글
[c++] 1차원 배열(벡터) 선언 및 초기화 방법 (0) | 2023.07.25 |
---|---|
[c++] <STL> pair 사용법 (0) | 2023.07.24 |
[c++] 큐, STL<queue> (0) | 2023.07.13 |
[c++] 스택 - 일반구현 vs STL<stack> (0) | 2023.07.13 |
[c++] iterator에 대해서 (0) | 2023.07.13 |