🍞 Problem Solving/C & C++

[C++] 입력 개수 모를 때 무한 반복문 제어 cin.eof()

박빵이 2022. 9. 26. 20:32

무한 반복문을 제어하는 문제를 풀다가 막혀서 정리하고자 한다. 

데이터 소스에서 더 이상 읽을 데이터가 없어 EOF(End Of File)를 리턴하면 종료해야 하므로

EOF가 true면 반복문을 탈출하도록 만든다.

 

EOF: 입력의 끝

 

"입력의 끝"(eof)에 다다랐다면, 반복문에서 탈출한다라는 뜻을 가진 구문이다.

if (cin.eof() == 1) { break; }

 

ex) https://www.acmicpc.net/problem/14909

 

14909번: 양수 개수 세기

첫째 줄에 최대 1,000,000개의 정수가 주어진다. 입력으로 주어지는 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같다.

www.acmicpc.net

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	int cnt = 0;
	while (1) {
		int n;
		cin >> n;
		if (cin.eof() == 1) break;
		if (n > 0) cnt++;
	}
	cout << cnt;
}