scanf & 버퍼
282
작성한 질문수 23
안녕하세요
강의의 최종 코드 중 일부입니다.
...
printf("input one character and two integers:\n");
while ((c = getchar()) != '\n')
{
scanf("%d %d", &rows, &cols);
while (getchar() != '\n') continue;
display(c, rows, cols);
...여기서 A 3 2(엔터)를 입력하면 상단의 c=getchar()에 의해 getchar이 A를 가져가고 버퍼는 |A 3 2\n| 에서 | 3 2\n| 로 변하게 됩니다.(띄어쓰기 유의)
그다음 scanf("%d %d", &rows, &cols); 는 버퍼의 맨 앞의 띄어쓰기를 읽어야 하지 않나요? 그런데 아시다시피 scanf가 입력버퍼에서 읽는 것은 3과 2입니다.
scanf가 띄어쓰기를 읽는다고 알고 있는데 3앞의 공백이 어떻게 처리된건지 궁금합니다.
감사합니다.
답변 1
2
안녕하세요, 답변 도우미 Soobak 입니다.
scanf() 함수의 형식 지정자 중 %d 형식 지정자의 경우, 공백(space), 탭, 개행 문자와 같은 모든 공백 문자들을 자동으로 무시하기 때문입니다. 형식 지정자 %c 와 같은 경우에는 공백 문자를 포함하여 모든 문자를 읽어들이고 저장하지만, 그렇지 않은 형식 지정자들도 있습니다.
따라서, 버퍼에서 처음으로 만나는 공백을 무시하고, 첫 번째 비공백 문자인 3 과 2 를 rows 와 cols 에 각각 저장합니다.
2
안녕하세요, 답변 도우미 Soobak 입니다.
getchar() 함수는 입력 스트림(표준 입력 버퍼 포함)에서 현재 문자를 읽고, 그 문자를 반환합니다.
문자를 읽은 후에 버퍼를 비우지는 않습니다.
다만, 버퍼 내에서 현재 인덱스(읽기 위치)를 다음 문자의 위치로 이동시킵니다.
즉, getchar() 함수는 버퍼 내부의 현재 인덱스에 위치한 문자를 반환하고, 버퍼의 인덱스는 다음 문자의 위치로 이동합니다.
Export template 안됨
1
17
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
54
3
main 함수에서 왜 int만 선언이 되는걸까요
1
56
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
54
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
49
1
프로토타입과 함수간의 인자 불일치
1
73
2
12.12 헤더 관련 질문
1
60
2
Visual Studio Community 2026 사용 문의
1
137
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
61
2
getchar(), putchar()
1
93
3
강의자리ㅛ
1
79
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
113
2
소스파일안에 여러 파일
1
75
2
F5와 F7의 차이
1
76
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
53
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
65
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2





