문자열 입력 받기

2023. 3. 11. 18:44c++

728x90

 cin 은 공백이 입력으로 들어오는 순간 문자열의 끝이라고 판단하여 더 이상의 입력을 받지 않게 된다.

예를 들어 입력으로 Helo World! 치게 되면 Hello와 World 사이의 공백을 문자열의 끝으로 인식하여 Hello 만 입력받게 된다.

따라서 공백이 있는 문자열을 입력 받기 위해서는 다른 방법이 필요하다.

 


string 헤더파일에 속해 있는 getline 함수를 사용하면 된다. 

마지막이 널 문자 \n 인지를 판단하여 문자열을 구분하기 때문에  공백이 포함된 문자열을 입력으로 받을 수 있다.

 

#include <iostream>
#include <string>
using namespace std;
int main()
{	
  string a;
  getline(cin,a);
  cout<<a;
  return 0;
}

char a;
    cin >> a;
    
    string str;
    getline(cin,str);
    
    cout << a << endl;
    cout << str;

*위의 코드의 문제점

-> cin으로 입력을 받으면 버퍼에 개행문자 \n이 남아있게 된다. 

    그래서 getline으로 문자열을 입력받으려고 할 때 버퍼에 있던 개행문자가 getline으로 들어가 아무것도 입력을 받지 않고 종료한다.

 

*해결법

cin.ignore();로 버퍼를 비워줘야한다. 
char a;
    cin >> a;
    
    cin.ignore();
    
    string str;
    getline(cin,str);
    
    cout << a << endl;
    cout << str;

 

*getline 함수는 입력 받고 개행문자를 버퍼에 보관하지 않아서 비워주지 않아줘도 된다. *

728x90

'c++' 카테고리의 다른 글

unordered_set  (0) 2023.03.24
vector  (0) 2023.03.24
찾으려는 key 값보다 같거나 큰 숫자가 몇 번째에서 처음 등장하는지 찾기  (0) 2023.02.07
벡터의 중복되는 원소 제거하기  (0) 2023.02.07
iterator 반복자 사용  (0) 2022.12.28