..

Search

6) scanf() 함수

6) scanf() 함수

scanf() 함수


scanf() 함수

scanf() 함수는 C언어의 표준 입력 함수로, 사용자로부터 다양한 데이터를 다양한 서식에 맞춰 입력받을 수 있게 해줍니다.

scanf() 함수의 원형은 다음과 같습니다.

함수 원형

#include <stdio.h>

int scanf(const char * restrict format, ...);

 

scanf() 함수의 f는 formatted의 약자이며, 서식화된 입력을 받는다는 의미입니다.

이 함수는 입력받은 데이터를 어떤 서식으로 변환할지 서식 지정자(format specifier)를 통해 직접 지정할 수 있습니다.

 

다음 예제는 사용자로부터 정수를 두 번 입력받아서 그 합을 출력하는 예제입니다.

예제

#include <stdio.h>

 

int main(void)

{

    int num01, num02;

 

    printf("첫 번째 정수를 입력하세요 : ");

    scanf("%d", &num01);

    printf("두 번째 정수를 입력하세요 : ");

    scanf("%d", &num02);

 

    printf("입력하신 두 정수의 합은 %d입니다.\n", num01 + num02);

    return 0;

}

실행 결과

첫 번째 정수를 입력하세요 : 10

두 번째 정수를 입력하세요 : 20

입력하신 두 정수의 합은 30입니다.

 

C언어에서 데이터를 입력받으려면 입력받고자 하는 데이터의 타입에 해당하는 크기의 메모리를 우선 할당받아야 합니다.

이처럼 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 변수(variable)라고 합니다.

 

앞선 예제에서 scanf() 함수에 포함된 '&'기호는 주소 연산자(&)라고 합니다.

이 주소 연산자는 입력받은 데이터를 뒤에 나오는 변수에 저장하라는 의미입니다.

 

변수와 관련된 더 자세한 사항은 C언어 변수 수업에서 확인할 수 있습니다.

C언어 변수 수업 확인 =>

 

주소 연산자와 관련된 더 자세한 사항은 C언어 포인터 수업에서 확인할 수 있습니다.

C언어 포인터 수업 확인 =>


서식 지정자의 동시 사용

여러 개의 서식 지정자를 동시에 사용하여, 여러 데이터를 서로 다른 서식으로 한 번에 입력받을 수 있습니다.

단, 이때에는 서식 지정자의 순서와 저장할 변수의 순서가 반드시 같아야 합니다.

입력받는 데이터의 구분은 공백(줄 바꿈, 탭, 띄어쓰기 등)을 기준으로 삼습니다.

 

다음 예제는 사용자로부터 두 개의 정수를 한 번에 입력받아, 각각 8진수와 16진수로 출력하는 예제입니다.

예제

#include <stdio.h>

int main(void)

{

    int num01, num02;

 

    printf("두 개의 정수를 입력하세요 : ");

    scanf("%d %d", &num01, &num02);

 

    printf("입력하신 두 정수를 8진수로 나타내면 %o와 %o가 되고,\n", num01, num02);

    printf("입력하신 두 정수를 16진수로 나타내면 %x와 %x가 됩니다.\n", num01, num02);

    return 0;

}  

실행 결과

두 개의 정수를 입력하세요 : 10 20

입력하신 두 정수를 8진수로 나타내면 12와 24가 되고,

입력하신 두 정수를 16진수로 나타내면 a와 14가 됩니다.


double형 실수의 입력

scanf() 함수로 float형 실수를 입력받을 때는 서식 지정자로 '%f'를 사용하면 됩니다.

하지만 double형 실수를 입력받을 때는 printf() 함수에서처럼 '%f'를 사용하면 안 됩니다.

scanf() 함수로 double형 실수를 입력받을 때는 반드시 '%lf' 서식 지정자를 사용해야 정확한 값으로 입력받을 수 있습니다.

 

다음 예제는 사용자로부터 두 개의 실수를 한 번에 입력받아 출력하는 예제입니다.

예제

#include <stdio.h>  

int main(void)

{

    float num01;

    double num02;

 

    printf("두 개의 실수를 입력하세요 : ");

    scanf("%f %f", &num01, &num02);

    printf("입력하신 두 실수는 %f와 %f입니다.\n", num01, num02);

    printf("입력받은 두 실수 중 두 번째 double형 변수에는 전혀 다른 값이 저장되었습니다.\n\n");

 

    printf("다시 한 번 두 개의 실수를 입력하세요 : ");

    scanf("%f %lf", &num01, &num02);

    printf("입력하신 두 실수는 %f와 %f입니다.\n", num01, num02);

    printf("이번에는 두 실수 모두 제대로 저장되었습니다.\n");

    return 0;

}

실행 결과

두 개의 실수를 입력하세요 : 1.2 3.4

입력하신 두 실수는 1.200000와 0.000000입니다.

입력받은 두 실수 중 두 번째 double형 변수에는 전혀 다른 값이 저장되었습니다.

 

다시 한 번 두 개의 실수를 입력하세요 : 1.2 3.4

입력하신 두 실수는 1.200000와 3.400000입니다.

이번에는 두 실수 모두 제대로 저장되었습니다.


연습문제