화이트 스페이스 문자
가 있을 시 이전까지의 값만 결과로 받아들인다.화이트 스페이스 문자
는 입력 버퍼에 그대로 남아있다.#include <iostream>
using namespace std;
int main()
{
string str;
cin >> str;
cout << str;
}
입력 : Hi Hello
출력 : Hi
int main()
{
string str;
for (int i = 0; i < 2; i++)
{
cin >> str;
cout << str << endl;
}
}
입력 : Hi Hello
출력 : Hi
Hello
=> 입력을 두 번 받지 않고, 입력 버퍼에 남아있던 Hello가 자동으로 저장됨.
❗getline()은 <istream>에 속한 cin.getline()과 <string>에 속한 getline() 두 가지로 나뉜다.
#include <istream>
// cin.getline(변수 주소, 최대 입력 가능 문자 수, 제한자)
cin.getline(char* str, streamsize n, char dlim);
#include <iostream>
#include <istream>
using namespace std;
int main()
{
char str[5] = {0, 0, 0, 0, 0};
cin.getline(str, 5);
cout << str;
}
입력 : 12345
출력 : 1234
=> (n-1) = (5-1) = 4개의 문자를 읽어와 str에 저장하고 마지막 문자는 NULL로 변경
int main()
{
char str[5] = {0, 0, 0, 0, 0};
cin.getline(str, 5, '3');
cout << str;
}
입력 : 12345
출력 : 12
=> 제한자인 '3' 직전까지의 문자열인 12만 저장됨.
#include <string>
// getline(입력스트림 객체, string 객체, 구분자)
getline(istream& stream, string str, char dlim)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin, str);
cout << str;
}
int main()
{
int n;
string str;
cin >> n;
getline(cin, str);
cout << str;
}
입력 : 123
출력 :
위와 같은 상황에서 cin으로 n에 값을 할당하기 위해 정수를 입력하고 엔터(\n
)를 치게 된다.
이 때 입력 버퍼에 \n
가 남아있어 getline()에서 \n
를 받아 str에 삽입하게 된다.
때문에 n을 입력 받은 후 getline()을 통해 문자열을 입력받지 않고 다음 코드로 넘어가게 된다.
int main()
{
int n;
string str;
cin >> n;
cin.ignore();
getline(cin, str);
cout << str;
}
입력 : 123
abc
출력 : abc
이를 해결하기 위해 cin >>n; 다음에 cin.ignore();
를 추가해 입력 버퍼에 있는 모든 내용을 제거해준다. 이 경우 정상적으로 getline()이 실행된다.
#include <iostream>
char ch1;
ch1 = cin.get();
👁️🗨️ 참조
https://kyu9341.github.io/C-C/2020/01/17/C++getline()/
https://velog.io/@jxlhe46/C-getline-%ED%95%A8%EC%88%98
https://novlog.tistory.com/78