상수와 특수 문자 출력하기 with printf
2023.1.1. 최초 작성
printf 함수를 이용해 Hello World 메시지를 출력해보자.
/*
* 2023년 1월 1일
첫번째 프로그램 예제
*/
#include <stdio.h>
void main() {
// 출력하기
printf("Hello World\n");
}
위 코드는 C언어로 만든 가장 기본적인 코드라고 할 수 있다.
위 코드를 하나씩 분석해보자.
/*
* 2023년 1월 1일
첫번째 프로그램 예제
*/
여러 줄 주석이다. 주석은 설명을 적어두는데 컴파일에서 무시된다.
시작은 /* 이고 끝은 */ 이다.
// 출력하기
한 줄 주석이다. 슬러시 2개를 연속해서 사용하고 뒤에 오는 문자열은 주석처리 된다.
#include <stdio.h>
첫 번째 코드는 stdio.h라는 헤더 파일을 가져와서 현재 소스 코드에 합체 시킨다.
stdio.h는 Visual Studio에서 C++를 설치할 때 포함되어 있다.
stdio는 표준입출력이란 뜻이다. 기본적으로 C언어에서 입력과 출력을 담당하는 함수를 포함하고 있다.
void main()
{
}
main 함수라고 부른다. C언어 프로그램은 main 함수에서 시작되는데 이것은 그냥 약속이다.
중괄호라고 부르는 { } 는 함수의 범위를 나타내는 함수 블록(본체)이라고 한다.
printf("Hello World\n");
main 함수 안에 있는 한 줄의 명령은 출력하는 printf 함수이다. 쌍따옴표(“”) 안에 있는 문자열을 출력해준다.
\n 은 개행문자라고 하며 엔터를 의미하고 세미콜론(;)은 명령어의 끝을 의미한다. 역 슬러시(\)로 시작하는 문자는 escape sequence라고 하는 특수문자이다.
역 슬러시(\)는 키보드에서 원화 화폐 기호인 ₩로 표시되어있다.
printf 함수는 표준 출력에 해당하는 함수로 stdio.h 안에 포함되어 있다. 생략하면 에러가 나는 것이 정상이지만 에러를 일으키지 않을 때도 있다. 개발 툴에서 최소한의 기본값으로 보고 자동으로 인식하기 때문이다.
printf의 쌍따옴표 안에는 다양한 특수문자를 쓸 수 있는데 아래와 같다.
특수문자 | 설명 |
\a | alarm |
\b | backspace |
\f | form feed (프린트 출력에서 현재 페이지를 마침) |
\n | new line (다음행으로 줄을 바꿈) |
\r | carriage return |
\t | 탭 문자 |
\\ | 역슬러시 (특수문자를 화면에 출력하고 싶을 때) |
\‘ | 작은따옴표 (특수문자를 화면에 출력하고 싶을 때) |
\“ | 큰따옴표 (특수문자를 화면에 출력하고 싶을 때) |
\0 | NUL문자 (문자열의 끝) |
상수는 변하지 않는 값을 의미하는데 정수, 실수, 문자, 문자열로 구분할 수 있다.
먼저 정수는 10진수, 8진수, 16진수로 표시할 수 있는데 기본값은 10진수이다.
10진수는 일반적으로 사용하는 숫자로 0부터 9까지 숫자를 사용한다.
8진수는 0부터 7까지 숫자를 사용하는데 구분하기 위해서 앞에 숫자 0을 붙인다.
10진수 10은 8진수로 010이다.
16진수는 0부터 F까지 사용하는데 구분하기 위해 앞에 0x를 붙인다. 10진수로 10이 영문자 A이고 15가 영문자 F이다.
10진수 10은 16진수로 0x10이다.
정수를 printf 함수의 쌍따옴표 안에 그냥 넣으면 문자열로 인식한다. 그래서 정수라고 알려줘야 하는데 이때 사용하는 것이 서식 문자이다. 다른 말로 포맷 지시자라고도 한다.
#include <stdio.h>
void main() {
printf("10진수로 10을 출력 : %d\n", 10);
printf("8진수로 10을 출력 : %o\n", 010);
printf("16진수로 10을 출력 : %x\n", 0x10);
}
위 코드는 10진수, 8진수, 16진수로 각각 10을 출력한 것이다.
printf 함수에서 사용하는 서식 문자는 아래와 같다.
서식 문자 | 자료형 | 설명 |
%d, %i | int | 부호가 있는 정수를 10진수로 출력 |
%zd | ssize_t | 이론상 가장 큰 사이즈를 담을 수 있는 signed 변수 |
%ld | long | 부호가 있는 정수를 10진수로 출력 |
%lld | long long | 부호가 있는 정수를 10진수로 출력 |
%u | unsigned int | 부호가 없는 정수를 10진수로 출력 |
%zu | size_t | 이론상 가장 큰 사이즈를 담을 수 있는 unsigned 변수 |
%lu | unsigned long | 부호가 없는 정수를 10진수로 출력 |
%llu | unsigned long long | 부호가 없는 정수를 10진수로 출력 |
%o | 정수 | 정수를 8진수로 출력 |
%x | 정수 | 정수를 16진수로 출력 |
%f | float | 실수를 소수점 아래 6자리까지 출력 |
%lf | double | 실수를 소수점 아래 6자리까지 출력 |
%Lf | long double | double 이상을 출력 (시스템 마다 다름) |
%e | float | 지수 표기법으로 출력 (10의 몇 승) |
%le | double | double형 실수를 지수 표기법으로 출력 (10의 몇 승) |
%c | char | 문자 한 개 출력 |
%s | 문자열 | 문자열 출력 |
%p | 포인터 | 주소값 |
위 서식 문자에서 %d, %i, %c는 혼합사용이 가능하다. 그 이유는 ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호) 때문이다.
출처 : https://www.asciitable.com/
ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal
ASCII Table ASCII stands for American Standard Code for Information Interchange. Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long
www.asciitable.com
정수를 표현할 때 그냥 숫자만 쓰면 int 타입으로 인식하고 숫자 뒤에 영문자 L을 붙이면 long 타입으로 인식한다. L은 소문자와 대문자 모두 인식하지만 헷갈리지 않으려면 대문자 L이 좋다. long logn 타입은 LL을 붙인다.
실수형을 표현할 때는 기본값이 double인데 float 형은 숫자 뒤에 영문자 F를 붙여 float 타입으로 인식한다. long double은 숫자 뒤에 영문자 L을 붙여 long double 타입으로 인식한다.
#include <stdio.h>
void main() {
printf("%d\n", 1234567891);
printf("%ld\n", 1234567891L);
printf("%lld\n", 1234567891011121314LL);
printf("%lf\n", 0.123456789);
printf("%f\n", 0.123456789F);
printf("%Lf\n", 0.123456789101112L);
}