작성
·
220
·
수정됨
1
안녕하세요
강의의 최종 코드 중 일부입니다.
...
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
에 각각 저장합니다.
이해 잘 됐어요 감사합니다!
그리고 하나 궁금한 게 더 있는데
getchar()는 버퍼 칸을 읽음과 동시에 그 버퍼칸을 비우나요? 그렇게 돼서 앞당겨지는건가요?