본문 바로가기
IVS/C 프로그래밍

[C++] 공백있는 문자열 입력받기 - getline

by 코곰_ 2025. 1. 9.

 

 

 

 

 

 

 

 

 

 

 

 

아래와 같이, 공백이 있는 "hello world" 를 입력 받고 출력하면 "hello"만 출력된다.

위 코드에서는 scanf("%s", arr)를 사용했기 때문에, 공백을 포함한 문자열을 입력받을 수 없다. scanf는 공백이나 개행 문자를 만나면 입력을 중단하기 때문에, "hello world"를 입력하면 arr에는 "hello"만 저장된다.

#include <bits/stdc++.h>
using namespace std;

int main(void)
{
    char arr[20]; // hello world 입력받고 출력하기
    scanf("%s", arr); // hello world 입력
    printf("%s", arr); // hello만 출력

    return 0;
}

 

 

 

 

공백을 포함한 문자열을 입력받기 위해서는? getline()

getline 함수를 사용하면 된다. 

string과 char 배열로 입력받을 때가 조금 다르다.

 

 

 

 

 

getline()

std::getline(std::istream& input_stream, std::string& target_string);

 

 

  • 공백이나 이 포함된 문자열을 한 줄 전체를 읽는다.
  • 기본적으로 **개행 문자(\n)**를 구분자로 사용하며, 개행 문자 앞까지 입력을 저장한다.

 

 

 

구분자 변경

std::getline(std::istream& input_stream, std::string& target_string, char delimiter);

 

  • 마지막 매개변수로 구분자를 지정할 수 있다.
  • 지정된 구분자를 만나면 읽기를 중단

 

 

 

 

 

 

1. std::getline을 사용하려면 std::string을 사용

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int main(void)
{
    string arr; // hello world 입력받고 출력하기
    getline(cin, arr); // hello world 입력
    cout << arr << endl; // hello world 출력

    return 0;
}

 

 

 

 

2. cin.getline을 사용하여 char 배열로 입력받기

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;

int main(void)
{
    char arr[20]; // hello world 입력받고 출력하기
    cin.getline(arr, 20); // hello world 입력
    cout << arr << endl; // hello world 출력

    return 0;
}

 

 

 

 

 

결론

  • std::getline(cin, arr)을 사용하면 std::string에 공백을 포함한 문자열을 입력받을 수 있다.
  • cin.getline(arr, 20)을 사용하면 char 배열에 공백을 포함한 문자열을 입력받을 수 있다.
  • scanf("%s", arr)는 공백을 포함한 문자열을 입력받지 않으므로, 이를 대신하려면 std::getline을 사용하는 것이 좋다.

 

 

'IVS > C 프로그래밍' 카테고리의 다른 글

[C] 형변환, 비트연산자  (1) 2025.01.13
[C++] 문자열 처리- strcmp, strcpy, strcat  (0) 2025.01.09
[C++] 중첩 반복문 - continue, break  (0) 2025.01.08
[C++] 포인터  (0) 2025.01.08
[C++] 구조체  (0) 2025.01.08