scanf를 이용한 문자 입력 — 문자·문자열과 공백 | 기초 C언어 4.3.3
기초 C언어Chapter 04 변수 › Section 03 표준 입력 (scanf) › 03
4.3.3 scanf를 이용한 문자 입력
숫자가 아니라 글자를 받는 법. %c 와 %s 의 차이, 그리고 %s 에만 & 를 붙이지 않는 까닭.
강의 영상 YouTube에서 보기 ↗ · TECH79 | C언어 강의실
01scanf — 숫자만 받는 것이 아님교재 105p
- 받을 수 있는 것 셋 — 숫자 · 한 글자 · 문자열. 셋 다 scanf 하나로 해결함. 달라지는 것은 큰따옴표 안의 변환 지정자와, 받아 둘 변수의 자료형뿐임.
- %c — 캐릭터(character)의 c. 받는 글자는 반드시 하나뿐임. %s — 스트링(string), 곧 문자열의 s. 여러 문자가 나열된 것을 받음.
02한 글자를 받을 때 — %c교재 105p
- 받을 자리를 먼저 마련 — 글자 하나가 들어갈 char 변수를 미리 선언해 둠.
scanf("%c", &grade);
- & 를 함께 씀 — 값을 저장할 자리를 변수의 주소로 알려 주기 위함. 숫자를 받을 때와 똑같은 방식이고, 지정자만 %c 로 바뀐 것뿐임.
03여러 글자를 받을 때 — %s 와 문자 배열교재 105p
- 문자 배열 — C언어에는 문자열 자료형이 따로 없고 문자를 나란히 늘어놓은 배열로만 다룸. 담아 둘 배열을 먼저 선언해야 함.
char name[10];scanf("%s", name);
- 열 자리에 아홉 자 — name[10] 은 열 칸을 마련하지만, 마지막 한 자리는 문자열의 끝을 알리는 널 문자의 몫임.
여기서 자주 틀림
%s 로 문자 배열에 값을 받을 때는 변수 이름 앞에 & 를 붙이지 않음. 배열의 이름 자체가 배열이 시작되는 메모리 주소이기 때문. 숫자 입력에서는 & 를 빠뜨리는 것이 가장 흔한 잘못이었지만, 문자열에서는 거꾸로 붙이지 않아도 될 & 를 습관처럼 붙이는 것이 가장 흔한 잘못임. 까닭은 포인터 단원에서 다루므로, 지금은 규칙으로 외워 둘 것.
04%s 는 공백에서 멈춤교재 106p
- 공백이 곧 문자열의 끝 — scanf 는 스페이스 · 탭 · 엔터를 문자열의 끝으로 인식함.
- 앞부분만 저장됨 — LEE EUN SANG 을 쳐 넣어도 name 에 담기는 것은 첫 공백 앞의 LEE 까지임.
- 뒤에 남은 글자는 버려지지 않고 입력 통로에 그대로 머무름 — 공백을 건너 이름 전체를 받는 법은 8장 문자열의 입력과 출력에서 다룸.
전체 코드와 줄별 해설은 교재 106p CODE 4.9 에 있습니다.
이 절의 핵심 정리
- %c는 char 변수에 글자 하나를 받고, 변수 앞에 &를 붙인다.
- %s로 문자열을 받으려면 담을 문자 배열을 미리 선언해야 한다.
- %s에는 &를 붙이지 않는다 — 배열 이름이 그 자체로 시작 주소이기 때문이다.
- char name[10]에 담을 수 있는 글자는 널 문자를 뺀 9자다.
- %s는 첫 공백에서 끊겨 앞부분만 저장한다.
강의 자료4.3.3 scanf를 이용한 문자 입력
1 / 9
번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
댓글
댓글 쓰기