책 내용 질문하기
scanf와 printf에서 %c의 사용 방법 차이??
도서
2020 시나공 정보처리기사 실기 [기본서]
페이지
38
조회수
394
작성일
2020-06-14
작성자
탈퇴*원
첨부파일

안녕하세요. 시나공 책으로 독학으로 공부중입니다.

코딩쪽이 중요하다해서 실제 책에 나온 내용 실습하면서 해보고 있습니다.

정보처리 실기(초판 20.2.17 발행) 38페이지 맨 위에 5번문제에 대한 질문입니다.

 

scanf로 서식문자열을 %4c로 입력후 b배열에 SINAGONG을 입력하면, SINA가 저장된다고 되어있습니다.

이것을 실제로 확인해보고자. 실습을 해보고자

printf로 %4c로 해서 출력하니.. 정상출력이 안되었습니다.

그런데 %s나 %4s로 출력하니 정상출력하는것을 확인하였는데요..

실제로 printf 실습예제에 보니 문자열처리는 모두 %s로 하고 있는것 같습니다.

 

여기서 생각이 드는것은 scanf에서는 %s가 아닌 %4c 등으로도 문자열을 처리할수 있어보이는데..

printf에서 문자열 처리는 %s만 가능한 것처럼 보입니다. (제가 실습한 내용 안에서는요..)

 

이렇게 생각하는게 맞는것인지 궁금합니다. 맞다면 혹시 이유가 있을지 모르겠지만 이유가 궁금합니다.

만약 그것이 아니라 printf에서 %4c처럼 문자열 처리가 되게 하는 예제로 설명을 해주실수 있으실까요?

 

아울러 이 내용과 관련된 문자열의 입.출력 관련한 내용에 대한 설명을 부탁드리고자 합니다.

 

항상 감사드립니다.

 

 

 

 

 

답변
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는 단순히 한 글자 출력 외의 기능을 수행하지 못합니다.)

 

행복한 하루되세요 :)

  • 관리자
    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는 단순히 한 글자 출력 외의 기능을 수행하지 못합니다.)

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.