안녕하세요. 시나공 책으로 독학으로 공부중입니다.
코딩쪽이 중요하다해서 실제 책에 나온 내용 실습하면서 해보고 있습니다.
정보처리 실기(초판 20.2.17 발행) 38페이지 맨 위에 5번문제에 대한 질문입니다.
scanf로 서식문자열을 %4c로 입력후 b배열에 SINAGONG을 입력하면, SINA가 저장된다고 되어있습니다.
이것을 실제로 확인해보고자. 실습을 해보고자
printf로 %4c로 해서 출력하니.. 정상출력이 안되었습니다.
그런데 %s나 %4s로 출력하니 정상출력하는것을 확인하였는데요..
실제로 printf 실습예제에 보니 문자열처리는 모두 %s로 하고 있는것 같습니다.
여기서 생각이 드는것은 scanf에서는 %s가 아닌 %4c 등으로도 문자열을 처리할수 있어보이는데..
printf에서 문자열 처리는 %s만 가능한 것처럼 보입니다. (제가 실습한 내용 안에서는요..)
이렇게 생각하는게 맞는것인지 궁금합니다. 맞다면 혹시 이유가 있을지 모르겠지만 이유가 궁금합니다.
만약 그것이 아니라 printf에서 %4c처럼 문자열 처리가 되게 하는 예제로 설명을 해주실수 있으실까요?
아울러 이 내용과 관련된 문자열의 입.출력 관련한 내용에 대한 설명을 부탁드리고자 합니다.
항상 감사드립니다.
안녕하세요 길벗수험서 운영팀입니다.
scanf와 printf에서 %(숫자)c는 서로 다르게 작동합니다.
교재의 내용과 동일하게 scanf("%4c", b)의 경우 4글자를 받아 저장하지만 좀 풀어보면
1. 화면에서 4글자 만큼의 공간을 읽어들여라. - %4
2. 받아들인 데이터를 문자 타입으로 저장해라 - c
3. 저장할 곳의 위치는 b다. - b
** 읽어들인 데이터가 여러개인 경우 저장할 곳 다음 공간에 차례대로 저장해라. - 암묵적 프로세스
(b는 b[0]의 위치 주소를 갖고 있으므로 다음 공간인 b[1], b[2], b[3]에 차례대로 저장됩니다.)
printf("%4c", b)로 볼까요.
1. 화면에서 4글자 만큼의 공간을 확보해라 - %4
2. '문자 하나'를 출력해라 - c
3. 데이터는 b다. - b
%c 는 원래 하나의 문자를 입/출력하는 서식 지정자입니다.
이것이 scanf에서는 암묵적으로 여러 값을 받아 저장할 수 있는 프로세스가 존재할 뿐이죠.
위의 printf 코드를 사용하게 되면 보통 앞의 3개의 공백을 출력한 후 뒤에 문자 하나를 출력하게 됩니다.
b는 반드시 char 자료형의 일반 변수여야죠. 배열이면 안됩니다.
문자배열을 출력하는 서식지정자는 %s로 정해져 있으니까요.
만약 %c를 통해 문자배열을 출력하고 싶다면 반복문을 이용해야 합니다. 이런식으로요.
for(int i=0; i<4; i++)
printf("%c", b[i]);
음.. 설명이 되었나 모르겠네요.
printf 출력시 scanf의 %4c처럼 글자 수를 제한하여 출력하려면 서식지정자 %s를 사용해서 소수점을 이용해야 합니다.
char a[] = "sinagong";
printf("%.4s", a); - 출력 : sina
요런 식으로요. (printf에서 %c는 단순히 한 글자 출력 외의 기능을 수행하지 못합니다.)
행복한 하루되세요 :)
-
관리자2020-06-15 20:14:05
안녕하세요 길벗수험서 운영팀입니다.
scanf와 printf에서 %(숫자)c는 서로 다르게 작동합니다.
교재의 내용과 동일하게 scanf("%4c", b)의 경우 4글자를 받아 저장하지만 좀 풀어보면
1. 화면에서 4글자 만큼의 공간을 읽어들여라. - %4
2. 받아들인 데이터를 문자 타입으로 저장해라 - c
3. 저장할 곳의 위치는 b다. - b
** 읽어들인 데이터가 여러개인 경우 저장할 곳 다음 공간에 차례대로 저장해라. - 암묵적 프로세스
(b는 b[0]의 위치 주소를 갖고 있으므로 다음 공간인 b[1], b[2], b[3]에 차례대로 저장됩니다.)
printf("%4c", b)로 볼까요.
1. 화면에서 4글자 만큼의 공간을 확보해라 - %4
2. '문자 하나'를 출력해라 - c
3. 데이터는 b다. - b
%c 는 원래 하나의 문자를 입/출력하는 서식 지정자입니다.
이것이 scanf에서는 암묵적으로 여러 값을 받아 저장할 수 있는 프로세스가 존재할 뿐이죠.
위의 printf 코드를 사용하게 되면 보통 앞의 3개의 공백을 출력한 후 뒤에 문자 하나를 출력하게 됩니다.
b는 반드시 char 자료형의 일반 변수여야죠. 배열이면 안됩니다.
문자배열을 출력하는 서식지정자는 %s로 정해져 있으니까요.
만약 %c를 통해 문자배열을 출력하고 싶다면 반복문을 이용해야 합니다. 이런식으로요.
for(int i=0; i<4; i++)
printf("%c", b[i]);
음.. 설명이 되었나 모르겠네요.
printf 출력시 scanf의 %4c처럼 글자 수를 제한하여 출력하려면 서식지정자 %s를 사용해서 소수점을 이용해야 합니다.
char a[] = "sinagong";
printf("%.4s", a); - 출력 : sina
요런 식으로요. (printf에서 %c는 단순히 한 글자 출력 외의 기능을 수행하지 못합니다.)
행복한 하루되세요 :)