C언어 - printf, scanf

2022. 11. 3. 22:59C언어

728x90
  • printf

printf() 함수는 C언어의 표준 출력 함수입니다.

우리가 원하는 서식을 입력하면 그 서식에 맞춰 그대로 출력(stdout)해주는 함수입니다.

 

<printf() 함수의 원형>

#include <stdio.h>
int printf(const char* restrict format, ...);

- const char* format

출력할 데이터를 입력합니다.

 

ex)

"hello world"를 출력하고 싶다면 다음과 같은 코드를 통해 출력할 수 있습니다.

#include <stdio.h>

int main(void){
	printf("hello world");
	return 0;
}

 

printf() 에는 위와 같이 문자열 뿐만 아니라 변수의 값을 넣을 수도 있는데, 변수의 값를 출력하기 위해서는 서식 문자라는 것을 통해 출력할 수 있습니다.

 

서식 문자 출력 데이터 형태
%c 하나의 문자
%s 문자열
%d 부호 있는 10진 정수
%u 부호 없는 10진 정수
%f, %lf 실수 ( %f = float, %lf = double )
%o 부호 없는 8진 정수
%x, %X 부호 없는 16진 정수 ( %x : 소문자, %X : 대문자 )
%p 메모리 주소를 출력
%% 기호 %를 출력

ex)

예를 들어, 변수 a에 저장된 5라는 값을 출력하고 싶다면 다음과 같이 하면 됩니다.

#include <stdio.h>

int main(void){
	int a = 5;
	printf("%d", a);
	return 0;
}

서식 문자뿐만 아니라 특수 문자를 출력하기 위해 만들어진 이스케이프 시퀀스(escape sequence)를 통해 개행, 특수 문자 출력, Tab 등을 할 수 있습니다.

escape squence 출력 내용
\' 작은따옴표
\" 큰따옴표
\? 물음표
\\ 백 슬래시(\)
\n 개행, 줄 바꿈
\t 수평 탭 (Tab)
#include <stdio.h>

int main(void){
	int a = 5, b = 3;
	printf("a = %d\n", a);  // \n을 통해 줄 바꿈해서 다음 줄에 b의 값을 출력
	printf("b = %d\n", b);
	return 0;
}

/*
<출력결과>
5
3
*/
#include <stdio.h>

int main(void){
	printf("\"hello world\"\n"); // \"를 통해 " 출력
	return 0;
}

/*
<출력결과>
"hello world"

*/

  • scanf

scanff() 함수는 C언어의 표준 입력 함수입니다.

사용자로부터 다양한 데이터를 서식에 맞춰 입력받을 수 있게 해줍니다.

 

<scanf() 함수의 원형>

#include <stdio.h>
int scanf(const char* restrict format, ...);

- const char* format

입력받을 서식을 정의합니다.

만약 정수를 a라는 변수에 입력받는다고 한다면

scanf("%d", &a);

이런 식으로 입력을 받을 수 있습니다.

 

- &의 의미

C언어에는 값을 전달할 때, 2가지 방식이 존재합니다. ( call by value VS call by reference )

2가지 방식의 개념은 포인터를 할 때, 자세히 정리하도록 하겠습니다.

지금은 call by value는 값을 복사하는 것, call by reference는 해당 주소에 있는 변수에 직접 값을 넣는다 정도로만 알고 계시면 될 것 같습니다.

 

* 참고

Visual Studio와 같은 툴을 이용해서 C언어를 사용하다 보면 보안 경고가 뜰 때가 있습니다.

이유는 scanf() 함수가 사용자에게 입력을 받을 때, 길이에 대한 검증 절차가 없기 때문입니다. ( 이를 통해 buffer overflow와 같은 공격을 할 수 있음 )

그래서 VS와 같은 툴에서는 scanf() 함수보다는 보안 조치가 포함된 scanf_s()를 사용하는 것을 권장하고 있습니다.

 

만약 scanf() 함수를 사용하고 싶다면

#define _CRT_SECURE_NO_WARNINGS

를 입력하면 됩니다.

 

참고한 곳들

  • printf

https://blockdmask.tistory.com/472

 

[C언어/C++] printf 출력 함수 정리 및 예제

안녕하세요. BlockDMask입니다. 지난 시간에 scanf에 이어서 이번 시간은 C, C++에서 출력을 맡고 있는 printf라는 함수에 대해서 알아보려고 합니다. C언어를 시작할 때 콘솔 창에 문자, 숫자, 문자열 등

blockdmask.tistory.com

http://www.tcpschool.com/c/c_intro_printf

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

  • scanf

https://blockdmask.tistory.com/471

 

[C언어/C++] scanf 입력 함수 총정리 및 예제

안녕하세요. BlockDMask입니다. 오늘은 C언어, C++에서 사용자의 입력을 받을 수 있는 함수 scanf에 대해서 알아보려고 합니다. C언어에서 가장 기본이 되는 printf, scanf 함수 중 하나이므로 잘 알고 가

blockdmask.tistory.com

http://www.tcpschool.com/c/c_intro_scanf

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

728x90

'C언어' 카테고리의 다른 글

C언어 - 연산자  (0) 2022.11.09
C언어 - 자료형, 상수, 변수  (0) 2022.11.03
C언어 - 프로그램의 기본 구조  (0) 2022.11.03