입력 방식
getline() 함수는 개행 문자('\n')를 만날 때까지 한 줄 전체를 읽음 (공백 포함)
버퍼 처리
개행 문자를 읽어서 폐기하므로, 입력 버퍼를 깨끗이 비웁니다2.
getline() 함수의 두 가지 형태
/* cin.getline(): char* 형의 문자열을 받을 때 사용 */
cin.getline(char배열, 크기);
/* getline(cin, string변수): string 형의 문자열을 받을 때 사용 */
getline(cin, string변수);
⚠️ 주의사항
cin과 getline()을 함께 사용할 때, cin 사용 후 getline()을 호출하면 버퍼에 남아있는 개행 문자로 인해 문제가 발생할 수 있음
이 경우 cin.ignore()를 사용하여 버퍼를 비워주는 것이 좋음
배열의 크기를 알고 있는 경우
const int MAX_ROW = 5;
const int MAX_COL = 4;
vector<vector<int>> participant(MAX_ROW, vector<int>(MAX_COL, 0));
for (int i = 0; i < MAX_ROW; i++) {
for (int j = 0; j < MAX_COL; j++) {
cin >> participant[i][j];
}
}
vector<int> numbers(istream_iterator<int>(cin), {});
배열명()
istream_iterator<int>(cin)
cin
)에서 정수를 하나씩 읽는 반복자{}
(== 기본값인 istream_iterator<int>()
)💡
- 위 방법은 EOF를 만날 때까지 계속 입력을 받기 때문에 VScode에서는
0 1 2 2 2 7
이런 식으로 입력하고 엔터 쳐도 계속 입력이 받아졌는데, 백준 입력이 EOF로 끝날 수도 있기 때문에 정답 처리됨C++ EOF 처리 방법
#include <iostream> using namespace std; int main() { vector<int> numbers; int num; while (cin >> num) { // EOF가 입력되면 루프 종료 numbers.push_back(num); } return 0; }
int main() {
vector<int> numbers;
string input;
// 한 줄 전체 입력받기
getline(cin, input);
stringstream ss(input);
int num;
while (ss >> num) {
numbers.push_back(num); // 정수를 벡터에 추가
}
return 0;
}