백준 10951
백준 10951
https://www.acmicpc.net/problem/10951
백준 코드
깃허브 코드
A+B - 4
브론즈 5
| 시간 제한 | 메모리 제한 |
|---|---|
| 1초 | 256MB |
분류
- 수학
- 구현
- 사칙연산
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)출력
각 테스트 케이스마다 A+B를 출력한다.
예제
예제 입력 1
1 1 2 3 3 4 9 8 5 2예제 출력 1
2 5 7 17 7
문제분석
반복 횟수가 정해져 있지 않은 반복문을 구성하고 파일의 끝 - EOF 발생 시 중지 하라는 문제
CMD 즉, DOS에서 파일의 끝을 처리하기 위한 단축키 Ctrl+Z 입력 시 작업 중지(입력 중지) 해당하는 파일의 끝이 발생한다.
매크로 상수 EOF 값은 -1이다.
https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/eof-weof?view=msvc-170
I/O 루틴에서 파일의 끝(0xFF) 발생할 때 EOF(-1) 반환
즉, scanf에서 파일의 끝(0xFF) 발생 시 EOF(-1)가 반환 됨.
여기서 말한 파일의 끝도 EOF지만 구분을 위해 다르게 표현
0xFF도 -1이다. Byte값 기준 -1
뒤에 EOF는 매크로 상수로 정의된 -1
손 코딩
입출력 함수 해당하는 헤더파일 포함
메인 함수
A, B 변수 선언
반복(입력(A, B)가 EOF 아니라면)
출력 (A + B) + 줄바꿈
슈도코드
main
A, B 변수 선언
while(scanf A, B != EOF)
printf (A + B) + newline
코드
#include <cstdio>
#define TRUE 1
int main() {
int nInput1 = 0, nInput2 = 0;
int nResult = 0;
int nInputReturnValue = 0;
while(TRUE)
{
nInputReturnValue = scanf("%d %d", &nInput1, &nInput2);
if(nInputReturnValue == EOF) break;// EOF = -1
nResult = nInput1 + nInput2;
printf("%d\n", nResult);
}
return 0;
}
PS식 코드
#include <cstdio>
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
printf("%d\n", a + b);
return 0;
}
추가정리
iostream 사용한 EOF 처리
- std::cin » a » b 라면
- std::cin의 식의 반환값은 std::cin 객체 자신을 반환한다.
- std::cin이 조건 검사식에 위치하게 되면 std::cin 구문은 성공시 true를, 입력 실패할 시 false를 리턴하게 된다.
- std::cin 구문은 리턴형을 bool으로 변환
- 별도로 체크 시 std::cin.eof() 라는 함수 이용
- eof일 때는 true를 반환
scanf 반환 값
- eof일 때는 true를 반환
- 성공적으로 입력 받아 변수에 할당한 항목의 수를 반환한다.
- 이 문제는 EOF인지 여부이기에 != EOF도 나쁘지 않지만 제대로 된 입력 처리를 요구할 때는 == 2로 서식 인자 개수가 맞는 지 체크하는 것이 좋다.
댓글남기기