C언어 표준 입ㆍ출력함수 scanf

    2018-05-09 10:32:11 작성

    scanf

    int scanf(const char* _Format, ...)

    scanf 함수는 사용자에게 입력을 받기위한 함수입니다.
    printf와 같이 입력양식변환기호(서식문자)를 이용하여 입력받을 수 있습니다.
    첫번째 인자는 입력 양식 기호의 문자열입니다.
    ...은 입력양식변환기호에 대응하는 저장될 변수의 주소입니다.

    입력 양식 변환 기호
    서식문자 자료형 출력형태
    %d int 10진수 정수
    %ld long
    %lld long long
    %o int 8진수 정수
    %x 16진수 정수
    %f float float형 실수
    %lf double double형 실수
    %Lf long double long double형 실수
    %c char ASCII 코드 값에 대응하는 문자
    %s char* 문자열

    입력양식변환기호는 printf함수의 출력양식변환기호와 그 의미가 비슷합니다.


    정수 입력 예

    동시에 여러개의 입력을 받으려면 입력양식기호를 공백으로 구분하여 작성하면 됩니다.

    #include <stdio.h>
    
    int main(void) {
        int a, b, c;
    
        printf("1개의 정수를 입력하세요 : ");
        scanf("%d", &a); // 10진수 입력
    
        printf("2개의 정수를 입력하세요 : ");
        scanf("%o %x", &b, &c); // 8진수, 16진수로 입력
    
        printf("%d %d %d \n", a, b, c);
        return 0;
    }

    scanf 함수 2번째 인자값에 변수를 전달하는 과정에서 &(주소 연산자)가 붙어있는 것을 볼 수 있습니다.
    &(주소연산자)는 변수의 주소를 나타내는 연산자이며 이는 포인터를 공부할때 자세히 알아보고 지금은 그냥 저렇게 해야 하는구나 정도로만 이해 하도록 하세요.


    실수 입력 예

    출력양식기호에서는 은 %f가 float형과 double형 모두이지만,
    입력양식기호에서는 %f는 float, %lf가 double 자료형으로 입력되는것을 주의하시면 됩니다.

    #include <stdio.h>
    
    int main(void) {
        float a;
        double b;
        long double c;
    
        printf("float형 실수 입력 :");
        scanf("%f", &a);
    
        printf("double형 실수 입력 :");
        scanf("%lf", &b);
    
        printf("long double형 실수 입력 :");
        scanf("%Lf", &c);
    
        printf("float : %f\n", a);
        printf("double : %f\n", b);
        printf("long double : %Lf\n", c);
        return 0;
    }

    실수 입력시 e표기법으로 입력을 해도 됩니다.


    문자 입력 예

    두개 이상을 입력받을때는 공백으로 구분하여 입력을 받지만 ,
    %c 문자입력의 경우 다음과 같이 공백구분을 하지 않아도 각 문자에 대응하여 자료가 저장됩니다.

    #include <stdio.h>
    
    int main(void) {
        char a, b;
    
        printf("두개의 문자를 입력하세요 : ");
        scanf("%c %c", &a, &b);
    
        printf("입력된 문자 : %c 정수표현 : %d \n", a, a);
        printf("입력된 문자 : %c 정수표현 : %d \n", b, b);
        return 0;
    }


    문자열 입력 예

    문자열을 입력받을 때에는 &(주소연산자) 없이 변수를 전달하면 됩니다.

    #include <stdio.h>
    
    int main(void) {
        char a[255];
        char b[255];
    
        printf("두개의 문자열을 입력하세요.");
        scanf("%s %s", a, b);
    
        printf("첫번째 문자열 : %s\n", a);
        printf("두번째 문자열 : %s\n", b);
        return 0;
    }

    변수 a와 b는 배열이고 이것은 주소라는것을 유추해 보실수 있습니다.
    자세한 내용은 포인터와 배열에서 다룹니다.
    지금은 문자열을 입력받을땐 &(주소연산자)는 빼야 한다는 것을 기억하시면 됩니다.