Taking baby-developer steps

3. 기본 입출력 - Scanf()/&(앰퍼샌드)/주소연산자/형식지정자 본문

CS 지식/C언어_basic

3. 기본 입출력 - Scanf()/&(앰퍼샌드)/주소연산자/형식지정자

Surin Lee 2021. 3. 18. 09:50

C언어 기본 입출력

C언어에서 입력 받거나 출력할 때는 형식 지정자를 적절히 따라야 한다. 기본 입출력은 scanf()와 printf()함수로 공부할 것이다.

 

Scanf()

C언어에서 특정한 변수에 값을 넣기 위해서 scanf()를 사용한다.

#include <stdio.h>

int main(void){
	int a;
    scanf("%d", &a);
    print("입력한 숫자는 %d입니다.\n",a);
    system("pause")
	return 0;
}

단, 일반적으로 많이들 사용하는 Visual Studio는 기본적으로 취약한 함수를 사용할 수 없도록 제한하는데, scanf()가 이에 해당한다. 실제로 중요한 모듈등을 개발할 땐 scanf()를 이용하지 않는다. 하지만 일단, 가장 기본적인 입력을 받는 함수이기 때문에, 이 함수를 이용해 공부하도록 한다.

 

따라서, _CRT_SECURE_NO_WARNINGS를 적용한다. Visual Studio를 제외한 대부분의 IDE에서는 이 문구 없이도 컴파일이 진행된다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){
	int a;
    scanf("%d", &a);
    print("입력한 숫자는 %d입니다.\n",a);
    system("pause")
	return 0;
}

 

주소연산자와 형식지정자

scanf()를 이용할 때, &(ampersand(앰퍼샌드), 앤드 기호)를 이용하는 이유 : &는 특정한 변수의 주소를 의미한다.

& = 주소연산자

주소연산자는, 특정한 변수의 주소를 찾을 때 사용할 수 있는데, 후에 "포인터"를 배울 때 자세히 알아볼 것이다.

실제로 컴퓨터는 특정한 메모리 주소에 접근하여 데이터를 수정하므로, &를 이용하는 것이다. 이때 메모리 주소에 "얼마만큼의 크기로 데이터를 쓸 지" 결정해야하는데, 이 때 사용하는 것은 "형식지정자"이다.

 

형식지정자

이때 double형 데이터는 입력을 받을 때는 %lf를 사용하고, 출력할 때는 %f를 사용하는데, 입력을 받을 때는 "특정 주소"에 "특정 크기"만큼 입력을 수행하고, 출력을 할 때는 주소가 아닌 값 자체를 이용해 출력하므로 구체적인 크기를 지정하지 않아도 되기 때문이다.

 

+% 자체를 문자로 출력하고 싶을 때는,

printf("%%");

처럼 '%%'를 입력해서 출력할 수 있다.

 

 

요약

C언어에서 입력을 받거나 출력할 때는 형식 지정자를 적절히 따라야 한다.

printf()는 단순히 데이터를 넘기고(&를 사용할 필요가 없다), scanf()는 입력 받을 주소를 나타내기위해 &를 사용한다.

 

 

Comments