Dev/백준문제풀이

[백준] 10951_A+B-4

bebeghi3356 2025. 3. 6. 14:17

 

 

처음

#include <stdio.h>

int main() {
int A;
scanf("%d", &A);
int B;
scanf("%d", &B);

int k;
A+B = k;

printf("%d", k);
}

 

 

수정

#include <stdio.h>


int main() {

	int a, b;

	while (scanf("%d %d", &a, &b) != -1) {
		printf("%d \n", a + b);
	}

	return 0;
}

 

해설

- scant함수의 특징 : 서식지정자 개수 즉 읽은 데이터의 개수에 따른 반환값이 존재한다. 

만약 scanf("%d %d", &am &b);의 경우 서식지정자 &d가 2개 즉 

int 데이터를 2개 받았으므로 2를 반환한다.

만약 데이터를 읽다가 파일의 끝에 도달할 경우

scanf 함수는 -1을 반환한다.

 

여러개의 테스트 케이스를 입력하므로

입력의 반복이 이루어져야 하는데

이때 while문 조건식을 이용한다.

 

while문 조건식 설정 

scanf("%d %d", &a, &b) != -1

 

 


`!= -1` 대신 `!= EOF`를 쓰는 것이 더 정확하다고 한다 

### **1. `EOF`와 `-1`의 차이**
- 대부분의 시스템에서 **`EOF`는 -1과 같지만**, 특정 시스템에서는 다른 값일 수도 있어.
- 따라서 `!= -1`을 쓰는 대신 **`!= EOF`를 사용하는 것이 더 안전하고 가독성이 좋아.**

✅ **추천 코드 (더 안전한 버전)**  
```c
#include <stdio.h>

int main() {
    int a, b;

    while (scanf("%d %d", &a, &b) != EOF) {  // EOF를 사용
        printf("%d\n", a + b); 
    }

    return 0;
}
```

❌ `while (scanf("%d %d", &a, &b) != -1) {`  
✅ `while (scanf("%d %d", &a, &b) != EOF) {`  

 

'Dev > 백준문제풀이' 카테고리의 다른 글

[백준] 10872_팩토리얼  (0) 2025.03.06
[백준] 2741_N찍기  (0) 2025.03.06