scanf("%자리수[...]%*c, s);
- %[…] 은 edit set이라 불리며 scanf()를 통해 전달 받은 문자열이 […]안의 문자와 매치되는 경우에만 s에 저장
scanf("%자리수[^]%*c", s);
- %[]안의 ^는 scanf()를 통해 전달 받은 문자열이 ^ 뒤에 나오는 문자와 매치되지 않을 때 s에 저장됨.
- [^\n]는 \n을 제외한 문자라는 정규 표현식(RegEx)이다.
- 조건을 만족하지 못하는 곳과 그 뒷부분은 모두 무시
- scanf("%3[^\n]%*c", s);는 \n을 만날 때까지 입력받거나 세자리까지 입력 받는다.
scanf("%5[^:]%*c", s);는 :를 만날 때까지 입력 받거나 다섯자리까지 입력을 받는다.
%s와 %c의 차이
- %s는 white-space를 만나면 읽기를 중단함.
%c는 공백 여부에 관계없이 지정한 문자 수를 읽습니다.
%*c의 의미
scanf(“%5[^:-]%*c%d”, s, &d);
- :나 -를 만나거나 다섯자리까지 문자를 입력받는다.
- :나 -를 만나면 그 뒤에 있는 숫자를 가져옴
Input값에 따른 값의 차이
- 정해놓은 입력 받는 길이(5)보다 커졌을 때 값이 어떻게 바뀌는지 확인해봤다.
-는 음수 표현도 가능하기 때문에 좀 더 다양하게 값이 출력이 된다.
결론?
- scanf(“%5[^:-]%*c%d”, s, &d);와 같이 %c%d를 섞어 쓰는 경우 내가 원하는 값을 정확하게 출력하는게 어렵다고 생각이 든다. 자주 사용할 지도 의문이다.
같이 볼 내용
참고
stackoverflow.com/questions/30065675/what-does-scanf-nc-mean
www.quora.com/What-does-scanf-n-c-name-mean
'프로그래밍 언어 > C' 카테고리의 다른 글
(Mac OS) leaks 명령어를 이용하여 메모리 누수 검사하기 (0) | 2021.01.22 |
---|---|
man strcpy (파파고 번역) (0) | 2020.11.26 |
댓글