
아래와 같이, 공백이 있는 "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 |