본문 바로가기
C++

[C/C++] - 입력 개수를 모를때 (EOF까지 입력받기)

by 개발 고양이 2023. 12. 13.

1. EOF란?

EOF란 End - Of -File을 뜻하는 말로, 파일의 끝에 도달했음을 의미한다. 파일의 끝인 경우에는 TRUE, 파일의 끝이 아닌 경우에는 FALSE를 반환한다.

 

주의!

마지막 입력에서 판단하는 것이 아니다. 마지막 입력 다음, 더 이상 읽을 데이터가 없을 경우에 EOF가 TRUE를 반환한다.

 

 

2. EOF인지 판단하는 방법

① scanf 가 입력받은 인자의 갯수를 이용하기

scanf는 입력받은 인자의 개수를 반환하는 특성이 있다. 예를 들어, scanf(%d, %d, &a, &b); 를 통해 2개의 정수 a와 b를 정상적으로 입력받았다면, scanf의 값은 2가 된다. 

int a, b;
//scanf를 통하여 2개의 인자 a와 b가 정상적으로 입력되었다면
while(scanf("%d %d", &a, &b) == 2){
	printf("%d\n", a+b);
}

 

 

② scanf()의 값이 EOF인지 비교하기

앞서 scanf가 입력받은 인자의 개수를 반환하는 특성이 있다고 설명하였다. 만약 scanf가 올바른 입력을 받지 못했을 경우, scanf는 EOF 를 반환한다. 

int a, b;
// scanf의 반환값이 EOF가 아니라면
while(scanf("%d %d", &a, &b) != EOF){
	cout << a+b << "\n";
}

참고로 EOF는 -1의 값을 가지고 있다. 따라서 아래와 같이 -1인지 비교하는 것도 가능하다.

int a, b;
// scanf의 반환값이 -1이 아니라면
while(scanf("%d %d", &a, &b) != -1){
	cout << a+b << "\n";
}

 

 

 

③ cin.eof() 이용하기 (C++만 가능)

cin.eof()를 사용하여 파일의 끝에 도달했는지 검사한다. 더 이상의 입력이 들어오지 않으면 TRUE를 반환한다.

int a, b;

while(true){
    cin >> a >> b;
    // 더 이상의 입력이 없다면 (cin.eof()가 TRUE를 반환한다면)
    if(cin.eof() == true)
    	break;
    cout << a+b << "\n";
}