none
C언어 char scanf RRS feed

  • 질문

  • 안녕하세요 C언어를 배우고 있는 초보자입니다. 다름이 아니라 코딩을 하던 중 장난 삼아 어떤 코드를 적었는데요, 궁금한게 생겨서요

    #include<stdio.h>
    void main() {
    char alpha;
    scanf("%c", &alpha);
    printf("%c", alpha);

    }


    제가 분명 alpha는 char이라 선언했으면 alpha에 int나 float에 해당하는 값을 할당하면 에러가 날 거라 생각했어요.

    그런데 scanf 값에 2를 넣었더니 2를 프린트까지 하더라구요...?

    으으으으음 왜 실행되는거져?

    2018년 7월 12일 목요일 오전 2:47

답변

  • char 타입 역시 -128~127 범위의 정수 값을 담을 수 있는 1byte 정수 타입입니다.

    다만 C언어에서는 char 타입의 정수 값을 아스키 코드와 맵핑하여 문자로 표현하기도 하죠.

    scanf("%c", &alpha); 와 같이 %c 로 키보드 입력을 받는다면

    '2' 를 입력하였을 경우 alpha 변수에는 문자 '2' 에 대한 아스키 값인 0x32 가 들어가게 됩니다.

    (정수로 표현하면 0x32(10진수 50) 이지만 문자로 표현하면 '2' 가 되는거죠.)

    #include<stdio.h>
    void main() {
    	char alpha;
    	scanf("%c", &alpha);
    	printf("10진수: %d\n", alpha);
    	printf("16진수: 0x%X\n", alpha);
    	printf("문자: %c\n", alpha);
    }

    위와 같이 다양한 방식으로 printf 로 출력해보면 좀 더 이해가 되실겁니다.

    질문에 대한 결론만 말씀드리면 키보드에서 입력한 '2' 는 숫자 2가 아니라 문자 '2' 였던거죠.

    2018년 7월 12일 목요일 오전 4:08