👩‍💻 알고리즘/🔠 C

백준 10951

오브 🧙‍♂️ 2024. 2. 4. 14:07
#include <stdio.h>
int main() {
    int A, B;
    while(1){
        scanf("%d %d", &A, &B);
        printf("%d\n", A+B);
    }
    return 0;
}

 

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

위 처럼 적었는데,생각해보니까..이거 무한로프 도는데 메모리 괜찮나? 하는 생각이 들었음

 

그래서 멈춰줄 장치가 있어야 할 것 같다고 생각했고, 구글링을 통해 EOF라는 것을 찾았다.

EOF란 데이터 입력이 없으면 실행을 끝내는 상수이다. 

 

해서 고치면,

#include <stdio.h>

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

EOF가 아닐 때까지 계속 루프를 돈다는 이야기. 이는 데이터 입력이 없기 전까지 계속 돈다는 이야기가 된다.

 

근데 이렇게 짜도 돌아간다고 한다.

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

scanf의 리턴값과 관련된   해결 방법이라고 한다

scanf는 입력을 개수를 반환하는데, (%의 형식) 이 개수가 맞지 않으면 종료한다는 의미가 된다.

예컨데, 1 1 입력시 2가 출력되고, 1 a가 입력되면 1이, a 1가 입력되면 0이 반환된다.(a에서 입력 실패로 처리하고 반환하기 때문)