scanf와 whitespace 관련 질문드립니다.
615
작성한 질문수 8
안녕하세요:)
scanf도 getchar() 처럼 입력 받은 것을 버퍼에 넣어놓는다고 하셨는데요. getchar은 띄어쓰기도 하나의 문자로 입력 받는 것을 볼 수 있었습니다. 예를 들면
ab c를 입력 했을 때 a/b/ /c 이렇게 네 개가 입력이 되듯이 말이죠.
그렇다면 scanf도
scanf("%d %d", &rows, &cols);
while (getchar() != '\n') continue;
에서 예를 들어, 5 2라고 입력 받았다면 5/ /2 이렇게 띄어쓰기를 포함해 세 개를 입력 받게 될텐데요. 이때는 띄어쓰기가 두번째 %d로 들어가지 않고 띄어쓰기를 무시하고 2가 대신 들어갑니다.
이전의 다른 분 질문 답변에서
"scanf는 %c 로 받지 않는 이상은 whitespace를 무시합니다. "
라고 하셔서 무시한다는 것은 알았습니다.
그런데 이와 같이 무시하는 것이 입력받은 것과 scanf에서 입력받은 %(자료형)이 서로 맞지 않을 경우, whitespace 뿐만 아니라 모두 무시하는 것인가요?
아니면 특별히 whitespace만 무시하는 것인지 궁금합니다.
감사합니다!
답변 1
1
안녕하세요.
"입력받은 것과 scanf에서 입력받은 %(자료형)이 서로 맞지 않을 경우, whitespace 뿐만 아니라 모두 무시하는 것인가요?"
이 말씀이 맞습니다.
scanf("%d", n) 이런 형태일 경우, 십진수 숫자만 n에 입력시키라고 지시해준 것이나 마찬가지입니다. 따라서 십진수 숫자가 아닌건 무시합니다. 공백 문자같은 whitespace는 숫자 형태가 아니니 당연히 무시가 됩니다. 이땐 그냥 '가', 'a' 이런 문자도 무시 되어 n에 입력되지 못합니다. 숫자가 아니니까요!
그러나 whitespace 는 문자이기도 합니다. 엄연히 아스키코드표에 있는 하나의 char 문자이기도 합니다. 그러니 scanf("%c", c) 이렇게 %c로 입력 받을 땐 무시되지 않고 c 에 공백 문자 또한 잘 입력되는 것입니다. 문자니까요! 이 같은 원리로 getchar도 char를 입력 받는 함수기 때문에 공백 입력이 문제 없었던 것입니다.
이처럼 입력할 것을 지정한 % 지시자 타입과 맞지 않는 것은 무시할 뿐입니다.
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
48
3
main 함수에서 왜 int만 선언이 되는걸까요
1
54
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
53
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
46
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
135
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
74
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
52
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
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
67
2





