[boj] c언어 - 10952번(A+B-5)

2165 단어 BOJ 문제BOJ 문제

문제

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

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

입력의 마지막에는 0 두 개가 들어온다.

출력

각 테스트 케이스마다 A+B를 출력한다.

풀이

내가 처음 적은 코드(잘못됨)

#include <stdio.h>

int main()
{
    int a,b;
    while((a<=0)&&(b<=0))
    {
        scanf("%d %d\n", &a, &b);
        printf("%d", a+b);
    }
    return 0;
}

수를 입력받고 출력하는 것의 반복이므로 처음에 나는 while 안에 scanf와 printf를 다 넣고 while의 조건은 입력받는 수가 0보다 크거나 같을 때라고 작성하였다.
여기서 문제점은
1. a,b를 int로 선언만 하고 입력받기 전에 while 조건 안에 넣었으므로 a,b에 들어있는 쓰레기 값이 while의 조건이 되어 반복문이 안끝난다.

  1. while의 조건이 잘못되었다. 문제에서는 입력의 마지막에 0 0이 들어오면 끝나게 되어있는데, 나는 0보다 크거나 0이면 while문이 돌아가게 조건을 두었다.

따라서,
이를 해결하기 위해서는 while문 전에 a,b를 입력받은 다음 입력받은 a,b로 while의 조건을 작성해야 한다. while의 조건은 a,b가 0이 아니면 반복이 되어야 하므로 a!=0 b!=0으로 작성하여야 한다.
또한 scanf에는 줄바꿈\n을 굳이 쓰지 않아도 된다. (답은 맞다고 뜨지만 보기에 불편하다. - 입력받은 수의 결과가 바로 출력이 되는게 아니라 입력1, 입력2, 출력1, 입력3, 출력2 이런식으로 결과가 밀려서 출력되기 때문이다.)

  • scanf에 \n은 의도적으로 입력 버퍼에 있는 화이트스페이스 문자들을 지워야 할 필요가 있을 때에만 쓰는 것이고, 그냥 정수만 입력받을 것이라면 "%d%d"라고 쓰면 됩니다. (내가 적은 boj 문제 질문에 다른분이 남겨주신 답변이다!)

소스코드

#include <stdio.h>

int main()
{
    int a,b;
    scanf("%d %d", &a, &b);
    while((a!=0)&&(b!=0))
    {
        printf("%d\n", a+b);
        scanf("%d %d\n", &a, &b);
    }
    return 0;
}

메모

scanf의 특징에 대해 새로 하나 배울 수 있었다. 화이트스페이스 문자에 대해서도 더 알아봐야겠다.
while 반복문은 조건을 충족하면 무한히 반복한다. 적힌 조건에 부합하지 않을때 탈출..! while문을 쓸 때에는 문제를 잘 읽어보고 충족하는 조건의 범위를 잘 이해해서 반복을 탈출할 수 있게 작성해야 한다.

좋은 웹페이지 즐겨찾기