printf 와 scanf 함수 정리

NOAH·2021년 2월 15일
0

특수문자 출력

특수문자의미
\a경고름
\b백스페이스(backspace)
\f폼피드(form feed)
\n개 행(new line)
\r캐리지 리턴(carriage return)
\t수평 탭
\v수직 탭
\'작은 따옴표
\"큰 따옴표 출력
\?물음표 출력
\역슬래쉬 출력

printf 함수이야기

printf의 f는 formatted(서식이 지정된)을 의미한다.
따라서 printf라는 함수의 이름에는 '서식이 지적된 형태의 출력'
이라는 뜻이 담겨있다.

그렇다면 서식지 지정되었다는 것은 양식이 만들어졌다는 뜻으로 이해할 수 있다.

즉, '서식이 지어된 형태의 출력이라는 것은

출력양식이 만들어진 상태에서 출력을 진행한다는 뜻이다.

따라서 printf 함수를 이용하면,

문자열 안에 정수나 실수를 포함해서 출력하는 등의 출력양식을 직접 지정할 수 있다.

"제 나이는 10진수로 12살, 16진수로 C살 입니다."

위의 출력을 위해서 신경써야 할 부분은 사용자가 입력한 나이정보를 10진수 형태로, 그리고 16진수 형태로 문자열 항네 삽입하는 일이다. 따라서 이러한 일이 가능하도록 서식을 지정해야 한다. 다음은 이에 따라 정의된 서식이다.

"제 나이는 10진수로 %d살, 16진수로 %X살 입니다."

%d, %X와 같은 문자를 가리켜 서식문자라고 하는데, 이를 이용해서 서식을 지정하게 된다.

서식문자 종류와 의미

정수 출력을 위한 서식문자 : %d, %u, %o, %x
실수의 출력을 위한 서식무자 : %f, %e, %g

%s 를 이용한 문자열의 출력

%s 에서의 s는 string의 약자로서 문자열의 출력을 지시하기 위한 서식문자에 사용된다. 그런데 우리는 아직 문자열에 대해서 일부만 알고 있다.

따라서 문자열의 출력에 대한 깊이 있는 부분까지는 언급하기에 무리가 있다.
그래서 예제를 통해 제한적으로 알아보자..


include <stdio.h>

int main()
{
printf("%s, %s, %s, \n". "AAA", "BBB", "CCC");

return 0;
}

---output ---
AAA, BBB, BBB 
--- --- --- 

필드 폭을 지정하여 정돈되 출력 보이기

서직문자에는 풀력의 필드 폭을 지정하는 옵션을 추가 할 수 있다.


%8d 필드 폭을 8카 확보하고, 오르녹 정렬해서 출력 진행
%-8d 필드 폭을 8칸 확보하고, 왼쪽 정렬해서 출력을 진행



이렇듯 서식문자 사이에 들어가는 숫자를 기준을 필드 폭이 결정 된다.
그런데 출력의 형태는 기본적으로 오른쪽 정렬이다. 따라서 왼쪽 정렬을 하고자 한다면 서식문자에 보이듯이 -를 추가로 삽입해야 한다.

#include <stdio.h>

int main(void)
{
printf("%-8s, %14s, %5s, \n", "이  름", "전공학과", "학년");
printf("%-8s, %-14s, %5d, \n", "김동수", "수학과", 2);
printf("%-8s, %-14s, %5d, \n", "이을수", "역사학", 1);
printf("%-8s, %-14s, %5d, \n", "한서영", "기계공학", 4);

return 0;
}
이  름,   전공학과, 학년, 
김동수, 수학과     ,     2, 
이을수, 역사학     ,     1, 
한서영, 기계공학  ,     4, 

scanf 함수이야기

Printf는 출력에 대해서고, scanf는 입력에 관한 함수이다.
정수의 형태(%d)를 입력 받아서 num의 주솟값에(&num)에 그 값을 입력해준다.

정수 기반의 입력 형태 정의 하기

scanf 는

  1. 입력의 형식 : 어떤 데이터 형식으로 받아 들일까?
  2. 입력의 장소 : 어디에 저장할까?

이 두가지 정보를 서식문자를 사용하여 입력의 형식을 결정한다.

실수 기반의 입력형태 정희하기

printf 함수에서는 서식문자 %f, %e, %g의 의미가 각각 달랐지만 scanf에서는 'float형 데이터를 입력 받겠다'는 동일만 의미를 담고 있다.

float형보다 바이트 크기가 큰 실수자료형 double과 long double형은

%lf : double
%LF : long double

로 처리해서 이해하자.

#include <stdio.h>

int main(void)
{

	float num1;
    double num2;
    long double num3;
    
    printf("실수 입력1(e표기법으로) : " );
    scanf("%f", &num1);
    printf("입력된 실수 %f \n", num1);
    
    printf("실수 입력1(e표기법으로) : " );
    scanf("%lf", &num2);
    printf("입력된 실수 %lf \n", num2);
    
    printf("실수 입력1(e표기법으로) : " );
    scanf("%Lf", &num3);
    printf("입력된 실수 %Lf \n", num3);

}


0개의 댓글