티스토리 뷰

c++언어로 알고리즘 문제를 풀면서 계속 나를 괴롭히는 부분이 있는데 scanf와 printf이다.

 

문제를 다풀고 답은 제대로 나오는데 계속 timelimit이 나와서 인덱스나 로직만 살펴봤는데

입력하는 부분에서 잘못 코딩을 했었다.

 

#timelimit code
scanf("%d %d\n", &a, &b);

#수정한코드
scanf("%d %d", &a, &b);

 

첫번째 scanf와 두번째 scanf의 차이는 \n이 있느냐 없느냐 인데 

두개의 의미는 엄연히 다르다.

 

1번 scanf는

숫자값, 1개 이상의 공백문자, 숫자값, 1개 이상의 공백문자, 공백문자가 아닌 문자가 입력 버퍼에 있을 것을 기대한다는 뜻이며

2번 scanf는

숫자값, 1개 이상의 공백문자, 숫자값이 입력 버퍼에 있을 것을 기대한다는 뜻이다. 

 

#include <stdio.h>
 
int main(void)
{
    int a, b;
 
    printf("\n>>");
 
    #1
    scanf("%d %d\n", &a, &b);
    printf("[%d,%d]\n>>", a, b);
 
    #2
    scanf("%d %d\n", &a, &b);
    printf("[%d,%d]\n>>", a, b);
    return 0;
}

따라서 위 코드를 실행시키면 다음과 같은 결과가 나온다.

1, 2를 입력받고 1자 이상의 공백문자와 공백문자가 아닌 문자의 입력을 기다리게 되므로 바로 끝나는 것이 아니라 3이 입력된다. 

하지만 printf에는 %d %d로 숫자 두개만 출력한다고 되어있으므로 

[1, 2] 가 출력된다.

그다음 4, 5를 입력받고나서 printf에서 %d %d로 숫자 두개를 출력한다고 되어있으므로

입력 버퍼에 남아있던 3과 더불어서 방금 입력된 4가 함께

[3, 4]로 출력되는 것이다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함