C에서 제공하는 대표적인 '표준 입출력 함수'는 '표준 입출력 라이브러리'인 'stdio.h'에 정의되어 있습니다. stdio는 'Standard Input Output'의 줄임말입니다.
그리고 여기서 입력과 출력에 사용되는 장치는 키보드와 모니터를 뜻 합니다.
'printf()'는 'print formatted'라는 뜻으로 '양식 지정 출력 함수'입니다.
printf("내용");
의 기본 형태를 가지며, 내용 부분에는 앞서 살펴 보았던 escape 문자(출력 제어 문자)도 사용 가능합니다. 따라서 기본적으로 내용 출력 후 줄이 바뀌지않는 printf() 함수의 특성상
printf("첫 줄");
printf("둘째 줄");
이라는 코드가 있다면 출력값은
첫 줄둘째 줄
이 되지만, escape 문자 중 '\n(new line)'을 붙여주면
printf("첫 줄\n");
printf("둘째 줄");
첫 줄
둘째 줄
이렇게 바뀝니다.
내용 부분에는 변수도 출력할 수 있는데, a=1;
이라는 변수를 출력하고 싶다면, printf("%d", a);
의 형태로 a 값을 출력할 수 있으며, 출력값은 1
이 됩니다.
여기서 '%d' 부분을 '출력 양식 변환 기호'라고 하며, 원하는 출력을 위해서는 변수의 자료형에 맞는 출력 양식 변환 기호를 사용해야합니다.
출력 양식 변환 기호 | 변수의 자료형 | 변환 형식 |
---|---|---|
%d | char, short int, int | 부호있는 10진 정수 |
%ld | long, int | 부호 있는 10진 long 정수 |
%lld | long long int | 부호있는 10진 long long 정수 |
%u | unsigned int | 부호없는 10진 정수 |
%o | unsigned int | 부호없는 8진수 |
%x(%X) | unsigned int | 부호없는 16진수 |
%f | float, double | 10진 부동소수점 형식 |
%lf | long double | 10진 부동소수점 형식 |
%e(%E) | float, double | 지수 형태 |
%c | char, short int, int | 문자 |
%s | char* | 문자열 |
%p | void* | 포인터 주소값 |
만약 '%'가 출력하고싶다면 '%%'를 입력합니다.
printf()를 사용할 때는 변수의 자료형과 출력 양식 변환 기호에 유의해야합니다.
int a=65;
char c='B';
printf("%d %c\n", a, a);
printf("%d %c\n", c, c);
위와 같은 코드가 있다면 a라는 변수를 %d로 부호있는 10진 정수로 출력해서 '65', %c로 문자로 출력해서 'A'라는 결과 값이 나올 것입니다.
'A'가 출력되는 이유는 C는 ASCII 코드를 사용하므로 '65'라는 ASCII 코드값에 해당하는 'A'라는 문자를 출력하기 때문입니다.
따라서 마지막 줄의 코드는 '66 B'를 출력할 것 입니다.
65 A
66 B
printf()는 출력시 출력 폭이나 자릿수를 지정할 수 있습니다.
//n, m, i는 각각 자연수, j는 실수
printf("%nd", i); //총 n 자리이며 오른쪽부터 채움
printf("%-nd", i); //총 n 자리이며 왼쪽부터 채움
printf("%0nd", i); //총 n 자리이며 오른쪽부터 채우고 공백은 0으로 채움
printf("%n.mf", j); //총 n 자리(소수점 포함)이며 소수점 이하 m자리까지 출력
printf("%0n.mf", j); //총 n 자리(소수점 포함)이며 소수점 이하 m자리까지 출력하고 공백은 0으로 채움
'scanf()'는 '양식 지정 입력 함수'입니다.
scanf("출력 양식 변환 기호, ...", &변수명, ...);
위와 같은 형태로 사용하며 ""사이에는 출력 양식 변환 기호 외에는 사용하면 안됩니다.(입력을 여러개 받기위해 ','와 '공백'은 사용 가능) 그리고 변수명 앞에 '&(ampersand|주소 연산자)'를 꼭 붙여야하지만, 문자열이나 배열명은 그 자체가 주소의 의미를 가지므로 생략할 수 있습니다.
int a;
scanf("%d", &a);
printf("%d");
위와 같은 코드가 있을 때, 'a'에 scanf()로 사용자로부터 키보드로 값을 입력받아 그 값을 printf()로 출력합니다. 만약 '8'을 입력했다면 '8'이 출력됩니다.
'getchar()' 함수는 문자 단위를 키보드로부터 입력받으며, 이 입력값은 정수나 문자여야합니다. 따라서 이를 입력받을 변수도 정수형이나 문자형이어야합니다.
char c;
c = getchar();
위와 같은 형태로 사용되며, 문자 입력 후 '엔터'를 눌러야 입력됩니다. 그리고 괄호안에는 아무것도 입력하지않습니다.
'putchar()' 함수는 문자 단위를 모니터로 출력하며, getchar()와 달리 괄호안에 정수형 변수, 정수형 상수, 문자형 변수, 문자, 수식을 입력해 출력할 수 있습니다.
char c = 'g';
putchar(c);
위와 같은 형태로 사용됩니다.
'gets()' 함수는 키보드로부터 문자열을 입력받으며, 입력받는 변수는 '배열명'이나 '포인터 변수'여야합니다. 이때 문자열은 공백을 포함하며 엔터를 입력하면 마지막에 '\0(null 문자)'가 입력됩니다.
char* s;
gets(s);
위와 같은 형태로 사용합니다.
'puts()' 함수는 문자열을 출력하며, 출력이 끝나면 자동으로 줄이 바뀌는데, 이는 '\0'를 만나면 '\n'으로 바꾸어 출력하기 때문입니다.
char* s = "giraffe";
puts(s);
위와 같은 형태로 사용합니다.