티스토리 뷰
lecture/algorithm - c++
[c++] scanf("%d %d", &a, &b)와 scanf("%d %d\n", &a, &b)차이
tonirr 2020. 12. 26. 20:05c++언어로 알고리즘 문제를 풀면서 계속 나를 괴롭히는 부분이 있는데 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]로 출력되는 것이다.
'lecture > algorithm - c++' 카테고리의 다른 글
[c++] 영지선택 small, large (0) | 2020.12.30 |
---|---|
[c++] 블록의 최대값 (0) | 2020.12.29 |
[c++] 봉우리, 각 행의 평균과 가장 가까운 값 (0) | 2020.12.29 |
[c++] 공주구하기, 멀티 태스킹 (0) | 2020.12.27 |
[c++] 뮤직비디오, 마구간 정하기 (0) | 2020.12.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 교착상태
- client side rendering
- 인접행렬
- 배열
- 자료구조
- stackframe
- 클래스
- 퀵정렬
- 병행프로세스
- 스텍
- Stack
- C
- 운영체제
- 재귀함수
- 구조체
- Java
- C++
- 입출력장치
- BFS
- 세마포어
- dfs
- server side rendering
- 동적프로그래밍
- 인접리스트
- 최단경로
- 이진탐색
- javascript
- 소프트웨어
- 알고리즘
- react
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함