c언어 #2 - printf 함수 활용 (국비3일차)

 

오늘 주로 다룰 내용

printf의 다양한 활용!

1. printf("출력 Data");

2. printf("출력서식",  출력 Data);

3. printf("출력서식", 변수 이름);
(내일 할 예정)

 

 어제와 같은 방식으로 소스파일을 만들어준다.

오늘 주로 다룰 것은 어제 다 하지 못한 printf이기 때문에 이름을 printf로 설정했다.

확장자명 c도 꼭 기억하자!

 

또 기억해야 하는 것이 #include <stdio.h>이다. 잊지 말자!

 

1. printf("출력 Data");

 

그럼 printf의 1번 유형부터 해보자.

매우 간단하다.


그런데 이렇게 출력을 할 때,  키보드에 있는 키 중 그대로 출력이 되지 않는 3개가 있다.

큰따옴표("), 원화표시(역슬래시(\)), 퍼센트(%)

큰따옴표는 아예 에러가 나오게 되며, 역슬레쉬와 퍼센트는 출력이 되지 않는다.

큰따옴표는 문법에 혼동을 주기 때문에 에러가 나오는 것이다.

뒤에 두 개의 키는 그 키가 가진 코딩에서의 역할 때문이다.

예를 들면 이렇게 코딩을 하면 어떻게 출력이 될까?

처음 코딩을 하는 사람은 분명

aaa
bbb

로 출력 될 것이라 예상할 것이다.

그러나 그렇지 않다.

 

이렇게 출력되는 이유는 줄 바꿈을 우리가 명령하지 않았기 때문이다.

 

이런 경우처럼 특정한 명령(줄 바꿈, 들여 쓰기 등)을 할 수 있게 만들어주는 키가 바로

\(역슬래시, 원화표시)이다.

 

줄 바꿈은 \n을 입력하면 적용이 된다.

 

그럼 \로 쓸 수 있는 다른 기능들은 무엇이 있을까?

\a  경고음 소리 발생
\b  백스페이스
\f  폼 피드
\n  개행
\r  캐리지 리턴
\t  수평 탭
\v  수직 탭
\\  역슬래시
\'  작은따옴표
\"  큰따옴표


그럼 %는 왜 나오지 않을까? 그건 바로 printf의 2번째 유형과 관련되어 있다.

 

2. printf("출력서식",  출력 Data);

 

c언어의 data 종류 4가지

1. 정수 숫자(integer) : 10, 273, -5
2. 실수 숫자(float) : 3.14, -5.55
3. 한 문자(character) : 'A', 'z', '+'
4. 문자열(string) : "Hello", "안녕", "ㄱ"

 

그렇다면 여기서 짚고 넘어가야 할 문제

10 <> 10.0
5 <> '5'
'A' <> "A"
(<>는 같지 않다)

 

서식문자

%d(%i) ▷ 정수
%o ▷ 8진수로 보기
%x ▷ 16진수로 보기
%f ▷ 실수
%c ▷ 한 문자
%s ▷ 문자열

 

이를 적용해보면 이렇게 쓸 수가 있다.

 

그럼 이렇게 쓰는 이유는 무엇일까?

 

우선 3+5를 계산하게 하고 결과값을 출력하고 싶다고 가정해 보자.

이렇게 쓰면 결과값이 8로 나오지가 않는다.

하지만 이 유형을 사용하면 우리가 원하는 결과 값을 출력할 수 있다.

 


이 유형을 이용할 때 주의할 점이 있다.

뒤에 출력 data를 쓰지 않는 경우 이상한 값(garbage value)이 출력된다.

 

그리고 녹색 물결표시로 문제가 있음을 보여준다. (비주얼 스튜디오 똑똑해)

다른 부분을 안 적어도 비슷한 오류가 발생하니 꼭 서식에 맞게 작성하여야 한다.


이렇게 출력 서식을 여러 개 사용해 출력도 가능하다.

컴퓨터는 그렇게 똑똑하지 않아서 순서대로 입력해줘야 한다.

즉 "%d %f"를 서식으로 썼다면, 그에 맞는 데이터를 순서대로 입력해야 한다.

 

 

 

여기서 한발 더 나아가서

만약 성적표를 만든다고 가정해 보자.

 

그럼 숫자가 여러 줄에 거쳐 여러 항목에 나올 것이다.

 

ex)

30  70  60
80  40  100
5 3  8

그런데 점수의 배열이 맞지 않는 상황이 발생한다.

그렇다면 딱 맞추는 방법이 있을까?

있다.

 

필드의 폭을 지정할 수 있다.

방법은 아주 쉽다.

%와 그 뒤에 영문자 사이에 몇 자리를 차지하게 설정할 것인지 입력하면 된다.

 사이에 3개만큼의 필드폭을 입력해주면 이렇게 오른쪽 정렬이 된다.

왼쪽 정렬을 하고 싶으면 숫자 앞에 -를 입력해주면 된다. 

 

그럼 빈칸에 0을 넣은 상태로 출력도 가능할까?

있다.

바로 0 삽입키워드이다.

숫자 앞에 0만 입력해주면 된다.

이 방법은 문자나 문자열에도 적용이 가능하다.

 

 

그리고 %c의 쓰임에서는 예외사항이 있는데...

바로 아스키코드가 가진 0~127의 값이다.

그래서 그 값을 65로 지정해 줘도 'A'로 입력한 값과 같은 값이 나온다.

 

반대로 %d에 'A'를 넣어줘도

65의 값이 나타난다.

 


8진수나 16진수를 입력하고 싶은 경우도 반드시 있을 것이다.

8진수의 경우 숫자 앞에 0(옥타..)을 붙여주는 것이고

16진수의 경우 숫자 앞에 0x(헥사..)를 붙여주면 된다.