About C – “표준 입출력 함수, printf, scanf”
About C – “표준 입출력 함수, printf, scanf”
10월 1, 2021
C 표준 입출력 함수, <stdio.h>
앞서 C 프로그램은 함수의 집합이고, 함수를 사용하기 위해선 반드시 선언해야 한다고 말씀드렸습니다. C언어에서는, 기본 문법과 함께 상당히 많은 함수들을 컴파일러에서 지원하는데, 이러한 함수들을 표준 라이브러리 함수라고 합니다. printf()와 같은, 미리 만들어져 있는 함수는 바로 사용하면 됩니다만, 역시 사용하기 전에 반드시 선언해야 합니다. 그리고, 직접 선언을 하는 방법보다는 그 함수가 포함되어 있는 stdio.h라는 파일을 프로그램에 추가시키는 방법을 많이 사용합니다.
#include <stdio.h> // 표준 헤더 파일을 추가합니다.
- 정형화된 출력을 모니터에 프린트합니다.
- 괄호 안의 큰 따옴표(” “)사이에 출력하고 싶은 문장을 쓰면 됩니다.
- 문장 중에는 숫자나 문자가 들어갈 수 있습니다.
- 특정 숫자나 문자를 특정 위치에 출력할 때는 %d 문자를 그 자리에 쓰고 닫는 큰 따옴표 다음에 콤마를 쓰고, 해당 문자나 숫자를 쓰면 됩니다.
#include <stdio.h>
int main()
{
printf("Hi!\n"); // 문장(문자열)을 출력합니다. \n은 줄바꿈을 의미하는 이스케이프 시퀀스입니다.
printf("I'm %d years old.",21); // 형 지정 문자를 사용하였습니다.
}
printf(“%[정렬][폭][.정밀도][크기]형지정문자”,…);다양한 포맷 규격 필드들이 다음과 같은 형태로 올 수 있습니다.
#include <stdio.h>
int main()
{
printf("12를 10진수로 : %d\n", 12);
printf("12를 10진수로 두 번째 방법 : %i\n", 12);
printf("12를 부호 없는 10진수 정수형으로 : %u\n", 12);
printf("12를 8진수로 : %o\n", 12);
printf("12를 문자열로 : %s\n", "12");
printf("12를 실수형으로 : %f\n", 12.0);
printf("12를 지수형으로 : %e\n", 12.0);
return 0;
}
printf 함수의 정렬
- -, +, # 부호가 가능합니다.
- -는 왼쪽 정렬을 의미하고, 없다면 기본적으로 오른쪽 정렬이 됩니다.
- +는 양수의 경우에 + 부호를 표시하도록 합니다.
- #는 출력값을 특별한 형태로 변경시킵니다.
printf 함수의 폭
- 수, 0수, *로 출력값의 최소 폭을 지정합니다.
- 폭 지정이 없을 경우에는 출력할 데이터의 폭에 맞추어지지만 폭 지정을 하면 지정한 폭만큼 자리를 차지합니다.
- %d로 50을 출력하면 50, %5d로는 공백 3과 50으로, %05d는 남는 자리를 0으로 채워서 출력합니다.
printf 함수의 정밀도
- 수를 얼마나 정밀하게 출력할 것일지를 결정합니다.
- 보통, 실수의 소수점 이하 자릿수를 지정하는 데에 사용하며, %5.2f면 전체 자릿수가 5자리, 소수점 이하 자릿수가 2자리인 것을 나타냅니다.
- 소수점도 한 자리를 차지합니다.
printf 함수의 크기
- ll은 int형이 long long형인 것임을 나타냅니다.
- L은 실수형이 long double형인 것임을 나타냅니다.
- 실수형은 double형인 것임을 나타냅니다. c99부터, double형은 %lf를 사용하는 것이 추가되었습니다.
#include <stdio.h>
int main(void)
{
printf("123456789012345678901234\n");
printf("%d%d%d\n",100,-200,300);
printf("%d %d %d\n",100,-200,300);
printf("%-8d%-8d%-8d\n",100,-200,300);
// 폭을 8자리로 지정하고, - 부호로 왼쪽 정렬로 출력하도록 지정했습니다.
printf("%+8d%8d%8d\n",100,-200,300);
// 폭을 8자리로 지정하고, + 부호는 양수이면 +를 출력하게 하는 역할을 합니다.
printf("%5d,%05d\n",100,100);]
//%05d에서, 100을 5자리로 출력하되 남는 부분을 0을 출력합니다.
return 0;
}
scanf() 함수
Read formatted data from the standard input stream.지정된 형식에 따라 키보드로부터 데이터를 입력받아 메모리에 저장하는 함수입니다.
scanf(“%[*][폭][크기]형지정문자”,…);
- % 다음에 *을 쓰면, 입력한 내용을 버리라는 것입니다.
scanf("%*d%d, &num);
두 개의 수를 입력받는데, 첫 번째 입력받은 수는 무시하고 두 번째 입력받은 수를 num에 저장합니다. - 폭 부분은, 정수값을 지정하여 읽어들일 최대 길이를 지정합니다.
%3d
로 입력받으면, 입력받는 숫자 중 처음의 3개만 입력받습니다. 12345를 입력하면, 123만 받아들입니다. scanf("%d,&num); // 키보드로 10진 정수 하나를 받아들여 변수 num에 저장합니다.
- 키보드로 입력하는 문자들을 %d로 입력받으면, 자동으로 정수로 변환해 줍니다.
- & 기호는 변수의 주소를 얻을 때 사용하는 연산자입니다.
#include <stdio.h>
int main(void)
{
char ch1, ch2, ch3;
printf("첫 번째 문자를 입력하세요 = ");
scanf("%c", &ch1);
getchar();
printf("두 번째 문자를 입력하세요 = ");
scanf("%c", &ch2);
getchar();
printf("세 번째 문자를 입력하세요 = ");
scanf("%c", &ch3);
getchar();
printf("\n입력한 세 개의 문자는, %c, %c, %c 입니다.", ch1, ch2, ch3);
return 0;
}
여러 개의 문자를 입력받을 때는 getchar()을 사용합니다. getchar()함수는 stdin에서 한 문자를 가져오고, 표준 입력에서 다음 문자를 리턴하는 함수입니다.제가 이해한 printf, scanf에 대한 개념입니다.