2.9 printf 함수

일반적인 프로그래밍 언어에서의 입출력은 언어 내에 구비되어 있으나, C언어의 경우에는 자체에 입출력기능이 없고 표준 라이브러리 함수를 이용하여 이루어 진다. 모든 C언어 컴파일러는 표준 라이브러리를 갖추고 있다.표준 라이브러리는 여러 가지 다양한 입출력 함수를 제공하고 있으며, 입출력 함수 중에 일반적으로 가장 많이 사용되는 함수는 printf함수와 scanf 함수이다.

printf 함수는 형식지정자와 함께 사용된다. 많이 사용되는 형식 지정자는 다음과 같다.

%d

출력값을 부호가 있는 십진수의 정수(decimal)로 바꾼다.

%f

출력값을 실수형(float)으로 바꾼다.

%c

출력값을 문자형(char)으로 바꾼다.

%s

출력값을 문자열형(string)으로 바꾼다.

%o

출력값을 8진수로 바꾼다.

%x

출력값을 16진수로 바꾼다.

하나의 printf문으로 여러개의 변수의 값을 출력 하는 방법을 알아보자.

prinf("%d %d \n", num1, num2);

이 printf 문에서는 두 개의 값을 출력한다. 첫 번째 %는 num1의 형식을 지정하고, 두 번째 %d는 변수 num2의 형식을 지정한다. 자료형이 다른 변수도 형식지정자를 각각 사용하여 출력 할 수 있다.

또한 형식지정자를 사용하여 출력 값의 자리수를 구할 수 있다.

printf(" %3d %2c %5.2f \n", onw, two, three);

라고 했을 때 정수 one을 3자리의 정수로 출력하고, two를 2자리의 문자로, three는 실수형변수를 총 5자리로 출력하고 그중 소수부분을 2자리로 표시하라는 뜻이다.

그리고 printf문 안에서 수식이나 상수 로도 출력 할 수 있다.

printf(" %d %d \n", 1, 5+5);

 

출력값의 자리수를 비교하는 예제를 보자

 

#include <stdio.h>

int main()
{
    int num = 100;
    

    printf("123456789\n");
    printf("%4d\n",num);
    printf("%6d\n",num);

    return 0;
}

 

printf01.png

 

2.10 scanf 함수

프로그램에서 데이터를 사용자가 입력하는 경우가 있다. 키보드를 통한 입력의 표준입력 함수인 scanf를 이용한다.

scnaf 함수도 printf 함수처럼 형식지정자를 이용한다.

scanf ("%d", &num);

변수 num 앞의 주소연산자인 &를 유의하자. 문자열의 입력을 제외하고 항상 주소 연산자를 붙인다.

printf

scanf

형식

%c

%c

단일 문자

%s

%s

문자열

%d

%d

부호있는 정수

%i

 

부호있는 정수

 

%i

10진수, 8진수, 16진수

%f

%f

실수(십진표기)

%e

%e

실수(과학적 표기)

%g

 

실수

%u

%u

부호없는 정수

%x

%x

부호없는 16진수

%o

%o

부호없는 8진수

%p

 

16진수 메모리 주소

 

예제를 통해 scanf 함수를 확인해 보자

 #include <stdio.h>

int main()
{
    int num;
    char ch;
    float fnum;

    printf("enter integer, character, floating number: ");
    scanf ("%d %c %f",&num, &ch, &fnum);

    printf("Typed int : %d\n",num);
    printf("Typed char : %c\n",ch);
    printf("Typed float : %f\n",fnum);

    return 0;
}

scanf 함수가 키보드로부터 입력 받을 때는 사용자가 엔터키를 누르기 전까지는 입력을 받지 않는다. 프로그램과 키보드 사이에 일시적으로 입력값을 저장하는 버퍼 라는 임시 기억공간이 있기 때문이다.

scnaf함수가 여러개의 입력값을 동시에 읽을 경우에는 입력값 사이에 공백문자, 개행문자, 탭문자 등을 사용하여서 입력을 분리한다.

scanf 함수도 마찬가지로 형식지정자를 사용하여 ,%5s 로 쓰면, 문자에 관계없이 5문자만 읽는 것이다.

 

 scanf01.png

 

다음의 예제는 printf를 사용하여 변수의 주소값을 읽어오는 예제이다

#include <stdio.h>

int main()
{
   int      a;
   int     b;
   int     c;
   int     d;
   float  e;
   float  f;
   float  g;
   float  h;
   short  i;
   char   j;
   int     *k;
   char   l;
   char  *m;

   printf("%p\n",&a);
   printf("%p\n",&b);
   printf("%p\n",&c);
   printf("%p\n",&d);
   printf("%p\n",&e);
   printf("%p\n",&f);
   printf("%p\n",&g);
   printf("%p\n",&h);
   printf("%p\n",&i);
   printf("%p\n",&j);
   printf("%p\n",&k);
   printf("%p\n",&l);
   printf("%p\n",&m);

   return 0;

}

 

printf02.png