백준 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인지 여부이기에 != EOF도 나쁘지 않지만 제대로 된 입력 처리를 요구할 때는 == 2로 서식 인자 개수가 맞는 지 체크하는 것이 좋다.

댓글남기기