Programming/C Basic

4. C 언어 표준 입출력 - printf, scanf

양디 2016. 1. 9. 22:46


c programming

표준 입출력 라이브러리 - stdio.h

written by YangD


이미지 출처 : http://www.pskills.org/c.jsp

stdio.h

여태 화면에 출력을 하기 위해서, printf() 함수를 사용했었습니다.

그럼 이것은 어디에 있는 걸까요 ?


바로 여태 계속 #include <stdio.h>로 불러들이던 stdio.h 헤더파일 내부에 선언되어 있습니다.

stdio는 standard input output 의 약자로, 말 그대로 표준 입 출력에 관련된 모든 내용들이 들어가 있는 표준 라이브러리입니다.


아주 많은 함수와 관련 변수가 있지만, 그 중에서 가장 많이 쓰이는 몇가지 함수에 대해 알아보려고 합니다.



printf / scanf 함수


1
2
3
4
5
6
7
8
9
#include <stdio.h> 
 
void main() 
{     
 
    int intVar = 5;     
    printf("int Value is.. %d \n", intVar); 
 
}
cs


예전에 사용했었던 코드입니다. 보시면 7번 줄에 printf 함수를 쓰고 있는 것을 볼 수 있습니다.


printf 는 화면에 출력하는 함수로, 출력 결과물에 다양한 변수들을 원하는 형태로 출력할 수 있기 때문에 많이 쓰입니다. 


scanf 는 키보드에서 값을 입력 받아서 변수에 그 값을 집어 넣어주는 함수입니다.

(C언어에서 보안상의 문제로, 가능하면 scanf_s 함수를 사용하도록 권장하고 있습니다. 입력함수들 대부분이 _s를 붙이는 것을 권장합니다.)


printf도, scanf도 변수를 사용하여 입력 / 출력을 진행하기 때문에, 그러한 변수들을 표현하는 특수 키워드들이 존재합니다.


큰따옴표 내부의 내용들은 전부 문자들로 받아들여지기 때문에, 변수 이름을 집어 넣으면 변수 값을 출력하는 것이 아니라 변수 이름을 그대로 출력합니다.


따라서 변수를 관리하기 위한 키워드들은 다음과 같습니다.


  • %d        : 정수를 10진수로 표현.
  • %o        : 정수를 8진수로 표현.
  • %x / %X  : 정수를 16진수로 표현. x는 16진수의 알파벳이 소문자, X는 대문자로 표현.
  • %u        : 정수를 10진수로 표현하되, 부호를 없앰.
  • %c        : 아스키코드 1개 글자를 표현
  • %s        : 문자열을 표현.
  • %f        : 고정소수점 방식으로 실수를 표현
  • %e        : 부동소수점 방식으로 실수를 표현


위의 키워드들에 앞에 숫자나 부호를 집어 넣으면 조금 더 변수를 깔끔하게 표현할 수 있습니다.


정수 일 경우

  • printf("%5d", x) : 5칸을 차지하고 x의 값을 출력합니다.
  • printf("%05d", x) : 5칸을 차지하고 x의 값을 출력하되, 5칸 중에 x의 값이 들어간 칸을 제외한 나머지 칸에 0을 채워넣습니다.
  • printf("%-5d", x) : 5칸을 차지하고 x의 값을 출력하되, 좌측정렬합니다. (기본은 우측정렬)

실수 일 경우
실수의 경우에도 위의 정수와 같은 기능들이 그대로 적용됩니다.
다음은 실수에만 추가되는 기능입니다.
  • printf("% .2f", x); x를 소수점 2번째 자리까지 출력합니다.

변수가 여러 개 있을 경우, 순서대로 변수를 입력해주어야 합니다.

1
2
3
4
5
6
7
8
9
#include <stdio.h> 
 
void main() 
{     
 
    int a = 1, b = 2, c = 3;     
    printf("a = %d, b = %d, c = %d \n", a , b, c); 
 
}
cs


위의 코드의 경우를 출력해봅시다.


a = 1, b = 2, c = 3


위와 같은 모습의 출력 창이 뜨게 됩니다. 


첫번째 나온 %d는 뒤에 첫번째로 나온 변수 a가 들어가고, 

두번째 나온 %d는 두번째로 나온 b, 세번쨰 %d에는 세번째로 나온 c가 들어갑니다.


scanf를 통해 변수를 집어 넣고, 그 변수를 한번 출력해봅시다.


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
void main() {
 
    int a;
 
    printf("입력해주세요.\n");
 
    scanf_s("%d", &a);
 
    printf("a = %d \n", a);
 
}
cs


위의 9번쨰 줄에 scanf를 처음으로 사용하였네요.


뒤에 변수를 보면 &가 붙어있는데, 이것은 나중에 배울 주소 관련 기호입니다.


지금은 그냥 scanf에는 &가 붙어야 하는구나! 하고 알아주시면 될 것 같습니다.




12를 치고 엔터를 누르면 변수가 입력됩니다.


직접 한번 해보세요 !


그리고 여태 printf에서 \n를 계속 입력했다는 것을 볼 수 있었습니다.


이런 문자들을 서식문자라고 하는데, 다음과 같은 종류가 있습니다.


  • \n : 개행을 합니다. 즉, 한 줄 엔터 치는 효과입니다.
  • \t : 출력 위치를 다음 탭 위치로 이동합니다. 키보드 탭과 같습니다.
  • \\ : \를 출력하기 위해 사용됩니다.
  • \" : "를 출력해줍니다. 
  • \' : '를 출력해줍니다. 

모두 다 직접 실험해봅시다 !




Point !

printf 는 출력 함수

scanf 는 입력 함수

변수 관리, 서식문자 !

직접 코딩해 봅시다.


"입력해 주세요" 라는 화면이 뜨고,

소수를 집어 넣으면 그 소수를

10칸을 차지하고, 빈 공간에는 0을 넣으며, 소수점 아래 3째자리까지 출력되게 만들어 봅시다.






댓글