상세 컨텐츠

본문 제목

[백준]BOJ _브론즈 5_ 10951번 A+B -4 _C언어(EOF/출력초과)

알고리즘/C

by 셉인 2022. 9. 13. 00:13

본문

728x90

10951번: A+B - 4 (acmicpc.net)

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

<출력 초과 / 틀린 코드>

#include <stdio.h>
int main(){
	int A=0; int B=0;
	
	while(1){
    scanf("%d %d", &A,&B);
		if(A,B>0&&A,B<10){
			printf("%d",A+B);
		}
	}
	return 0;
}

단순히 무조건 반복해서 계속 해주면 된다고 생각했다.. 

하지만 그랬더니 출력 초과가 뜨는데 

오엠지 놀랐다.. 

A+B라서 만만하게 봤는데 나를 농락했다.!!

어쩐지 정답 비율이 35프로더라... 

(저도 검색해서 맞췄어요.. 처음보는 개념)

 

<맞은 코드>

#include <stdio.h>

int main() {
    int A=0,B=0;
    while(scanf("%d %d", &A, &B)!=EOF) {
        printf("%d\n", A+B);
    }
}

<코드 해석>

EOF라는 개념을 알고 계셔야합니다 !!

while(1)만쓰던 저는 while(scanf)는 또 처음이라 낯선.. 

C언어는 운영체제와 상관없이, 파일의 끝에 도달했을 때 언제나 특별한 값을 반환하도록 합니다.

EOF는 End Of File의 약자로 파일의 끝을 표현하기 위해 '-1'로 정의된 상수입니다.

그러므로 scanf("%d %d", &A, &B)!=EOF의 의미는 파일의 끝에 도달할 때까지 while문을 실행한다는 의미입니다.

해당 문구를 작성해주지 않아서 출력초과가 나온 것입니다.

while문을 쓸때 처희가 break;를 해주는 것처럼 해당에도 끝을 정해줘야 출력을 끝내고, 출력 초과를 내지 않는 것입니다.

그렇지 않으면 scanf가 무한루프를 돌아서 메모리 할당 범위를 넘어스기 때문에 꼭 EOF가 필수인 것입니다.

 

브론즈 5문제인데,,, 😂

10951번: A+B - 4 (acmicpc.net)

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

728x90

관련글 더보기

댓글 영역