BlogMenu

Post list

2014년 7월 11일 금요일

기본 입출력 함수 scanf()

이번 포스팅에선 C언어의 기본 입출력 함수중 입력 부분을 보자.

(+) 필요한 헤더 파일 <stdio.h>

#include <stdio.h>

입력 함수 scanf()

C언어에선 기본적인 입력 함수로 scanf()를 지원한다.

scanf()의 기본적인 사용 방법은 다음과 같다.

{1} 일반적인 변수에 입력받기

형식 : scanf("입력 받을 형식", &입력 받을 변수 이름);

예시 :
#include <stdio.h>

int main()
{
    int number;

    printf("input : ");
    scanf("%d", &number);

    printf("output : %d\n", number);

    return 0;
}

결과 :

여기서 가장 중요한 부분은 scanf()함수 형식에서

입력받을 변수 앞에 Ampersand(&)를 붙인다는 것이다.

'&'의 의미는 그 변수의 주소를 의미하는 것인데

자세한 내용은 변수와 포인터에 관한 포스팅에서 자세히 다루도록 한다.

일단은 scanf()사용시 변수 이름 앞에 '&'를 꼭 붙인다는걸 기억하자!

{2} 문자열 입력받기

형식 : scanf("%s", 입력 받을 변수 이름);

예시 :
#include <stdio.h>

int main()
{
    char string[51];

    printf("Input string (limits : 50 character) : ");
    scanf("%s", string);

    printf("output : %s\n", string);

    return 0;
}

결과 :

여기서 중요한 부분은 문자열을 입력 받을 땐

Ampersand(&)를 붙이지 않는다는 것이다

이것은 string[51]과 같이 배열로 선언한 변수의 이름은

일반적인 변수의 이름과는 다른 특성을 가지는데

자세한 내용은 포인터에 관한 포스팅에서 하기로 한다.

일단은 scanf()로 문자열을 입력 받을 시 변수 이름만 쓴다는 것을 기억하자!

또 하나는 길이가 51인 배열임에도 limits를 50이라고 말한 것인데

C언어에서 문자열의 맨 마지막엔 \0이라는 문자열의 끝을 알려주는

특수 문자가 꼭 있어야한다. 이것은 입력받을 때 자동으로 넣어주기 때문에

입력받을 한계 (50) + \0 (1개) = 총 길이 (51) 이와 같은 식이 나오게 된다.

따라서 50글자의 문자열을 입력받으려면 길이가 51인 배열이 필요한 것이다.

{3} 서식 문자

자료 타입자료형서식문자설명
정수형 int, short %d 10진 정수
%x 16진 정수
%o 8진 정수
unsigned int %u 부호 없는 양의 10진 정수
실수형 float %f float형 실수
%e float형 e를 이용한 지수표기법
double %lf double형 실수
%le double형 e를 이용한 지수 표기법
문자형 char %c 문자 1개
char[] %s 문자열

(+)통합 예제
#include <stdio.h>

int main()
{
    int d, x, o;
    unsigned int u;
    float f, e;
    double lf, le;
    char c, s[50];
    
    printf("==========Input==========\n");
    printf("d : ");
    scanf("%d", &d);
    
    printf("x : ");
    scanf("%x", &x);
    
    printf("o : ");
    scanf("%o", &o);
    
    printf("u : ");
    scanf("%u", &u);
    
    printf("f : ");
    scanf("%f", &f);
    
    printf("e : ");
    scanf("%e", &e);
    
    printf("lf : ");
    scanf("%lf", &lf);
    
    printf("le : ");
    scanf("%le", &le);
    
    printf("c : ");
    scanf("%c", &c);
    
    printf("s : ");
    scanf("%s", s);
    
    printf("==========Output==========\n");
    printf("d : %d\n", d);
    printf("x : %x\n", x);
    printf("o : %o\n", o);
    printf("u : %u\n", u);
    printf("f : %f\n", f);
    printf("e : %e\n", e);
    printf("lf : %lf\n", lf);
    printf("le : %le\n", le);
    printf("c : %c\n", c);
    printf("s : %s\n", s);
    
    return 0;
}

결과 :

여기서 한가지 짚고 넘어가야 할 것이 있다.

결과에 보면 %c를 입력받는 부분 없이 바로 %s를 입력받은 것을 볼 수 있다.

이런 현상이 일어나는 이유는 입력을 할 때 엔터도 '\n'이라는 문자로

인식되기 때문이다.

우리가 어떤 입력을 하고 엔터를 친다면 %c를 제외하고 컴퓨터는 \n전까지만 읽는다.

하지만 %c에선 \n도 문자이기 때문에 읽어들인다.

따라서 %le에 2.27e-002를 입력한 후 친 엔터가

%c에 입력으로 받아진 것이다.

출력부분에 보면 'c : '이 출력 된 후 한 줄이 띄어진 것이 그 이유이다.

댓글 없음:

댓글 쓰기