
- argument : 함수에 입력시키는 것
- parameter : argument를 받을 변수를 매개변수
- 반환값 ( return value ) : 함수가 돌려주는 결과 값
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
printf()
printf("나이:%d\n", 20);
%d > 큰 따옴표 콤마 뒤에 숫자 또는 변수명 표시
printf("나이:%d 키:%lf\n", 20, 176.5);
%f %lf 차이는 없으나 %lf로 씀 ( lf : long float )
printf("이름:%s 나이:%d 키:%lf\n", "korbomber", 20, 176.5);
%s > 문자열
printf("이름:%s 반:%c 나이:%d 키:%lf\n", "korbomber", 'B', 20, 176.5);
%c > 문자, 작은따옴표 사용
printf("이름:%s 반:%c 나이:%d 키:%g\n", "korbomber", 'b', 20, 176.5);
%g > %e와 %f 중에서 출력할 자릿수를 덜 차지하는 형태로 출력
printf("%[정렬] [폭] [.정밀도] [크기] 서식지정자",…);
- 정렬 : -, +, #, 0
- 크기 : l, ll, L
- 서식지정자 : d, f, c, s 등

정렬
- - : 왼쪽 정렬 / 없으면 디폴트로 오른쪽 정렬
- + : 양수의 경우 +부호 표시
- # : 출력값 형태 변경
- %#o는 8진수 앞에 0을 더 붙이도록 함
- %#x는 16진수 앞에 0x추가
- %#e, %#f는 소수점 뒤에 숫자가 없더라도 소수점 출력하도록함
- 0 : 공백은 0으로 채움
폭
- 수, *로 출력값의 최소폭 지정
- %d로 12를 출력하면 12, %5d로는 공백3칸과 12로 %05d는 00012 ( 남는 자리 채움 ) 로 출력
- printf("%*d",3,12); > 12를 %3d로 출력하라는 의미
정밀도
- 수를 얼마나 정밀하게 출력할 것인지를 결정
- 보통 실수의 소수점 이하 자릿수를 지정하는데 사용하며 %5.2f라면 전체 자릿수가 5자리, 소수점 이하 자릿수가 2자리인 것을 나타냄
- 소수점도 한 자리를 차지함
크기
- ll : int형이 long long형임을 나타냄
- 출력 예시
long long int x = 12345678900;
printf("%lld", x);
- 출력 예시
- L : 실수형이 long double형임을 나타냄
- f, lf : 실수형이 double형임을 나타냄
- C90에서는 float형이나 double형 모두 %f 사용, %lf없었음
- C99부터는 double형은 %lf 추가됨
- 현재 %f와 %lf는 같음(그러나, C++에서는 float는 %f, double은 %lf로 구분하여 사용함)
- z : sizeof() 연산자의 반환값 출력시 사용
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
scanf()
| 특성 | scanf() | scanf_s() |
| 버퍼 오버플로우 방지 | 미제공 | 제공 |
| 보안 | 취약점 존재 | 보안 향상 |
| 표준화 | C89/C99 및 이후 표준 | C11 표준 |
| 사용법 | 보다 자유로움 | 명시적인 버퍼 크기 제한이 필요함 |
| 호환성 | 일부 컴파일러에서 경고 없이 사용 가능 | 일부 컴파일러에서 경고 발생 |
scanf("%[*] [폭] [크기] 서식지정자", …..);
- 크기 : l, ll, L
- 서식지정자 : d, c, s, lf 등

*
- %다음에 *를 쓰면 입력한 내용을 버리라는 것
- scanf("%*d%d",&num);
- 두 개의 수를 입력받는데 첫 번째 입력받은 수는 무시하고 두 번째 입력받은 수를 num에 저장
- 데이터들을 키보드가 아닌 파일로부터 입력 받는 경우 특정한 부분만 입력받기 위해서 사용
폭
- 정수값을 지정하여 읽어들일 최대 길이를 지정
- %3d로 입력받으면 입력받는 숫자 중 처음 3개만 입력받음
- 12345를 입력하면 123만 받아들임
크기
- ll은 정수형이 long long형
- l은 정수형은 long형, 실수형은 double형
- L은 실수형이 long double형
2개 이상 입력받을때 스페이스로 구분
scanf()사용 시 visual studio 오류
반드시 첫번째줄에 작성
#define _CRT_SECURE_NO_WARNINGS
scanf() > scanf_s()
- 정수를 입력받는 경우에는 scanf()와 scanf_s()의 사용법은 동일
- int, float, double 같은 숫자 자료형은 자료형 크기가 일정하기 때문에 자료형을 입력받는 데 문제가 없음
- 즉 %d나 %lf로 입력받는 경우에는 scanf와 scanf_s는 동일한 형식으로 사용
- 하지만 문자(char, %c)와 문자열(char 배열, %s)을 입력받을 때는 다음과 같이 sizeof() 연산자로 크기를 반드시 지정해야 함
-
scanf_s("%d", &변수명); //정수 입력, scanf와 동일scanf_s("%lf", &변수명); //실수 입력, scanf와 동일scanf_s("%c", &변수명, (unsigned int)sizeof(변수명)); //문자 입력scanf_s("%s", 배열명, (unsigned int)sizeof(배열명)); // 문자열 입력, 배열명 앞에 &쓰지 않음에 주의
-
문자 세 개를 입력받아 출력

scanf() + getchar() 사용

scanf() : 문자 입력
getchar() : 엔터 입력, 무시
이렇게 쓰기

문자열 입력받아 출력
- %s로 문자열을 입력
- 문자열을 입력 받을 때는 다음과 같이 &를 쓰지 않음
- scanf("%s",ch);
- ch는 문자열(문자의 집합)을 저장해야 하므로 일반 변수가 아닌 여러 개의 저장 공간을 갖는 배열로 선언(char ch[10];)되어 있어야 함
- 매개변수가 배열이면 &를 사용하지 않고 배열의 이름만 사용
- 배열의 이름은 그 배열의 첫 번째 저장 공간의 주소
- 중간에 공백이 있다면 공백 전까지만 입력을 받을 수 있음

문자열 길이 문제 해결법
- 10까지면 "%9s" 사용
- scanf_s("%s", name, sizeof(name));
버퍼형 콘솔 입출력 함수
- 버퍼에 데이터를 모아 두었다가 한꺼번에 전송
| 구분 | 문자 | 문자열 | 서식 |
| 입력 | getchar | gets_s | scanf |
| 출력 | putchar | puts | printf |
putchar() 사용법

gets_s(), puts() 사용법

직접 콘솔 입출력 함수
- 버퍼를 거치지 않고 데이터를 얻는 즉시 입출력
- "conio.h"에 선언되어 있는 함수들
- ANSI C 표준 라이브러리 함수는 아님
- _getche()와 _getch()함수는 하나의 문자를 입력받을 수 있는데 _getche()는 입력된 값을 화면에 출력하는 에코(echo) 기능까지 있음
- 이 함수들은 문자 하나를 입력한 순간 바로 실행하므로 입력한 내용의 수정이 불가능
- conio.h 헤더 파일은 콘솔 입출력 함수를 제공하는 오래된 헤더 파일인데 C 언어 표준도 아니며 Visual Studio에서만 사용할 수 있고 리눅스나 Mac OS에서는 사용할 수 없음
| 구분 | 문자 | 문자열 | 서식 |
| 입력 | _getch, _getche | cgets | cscanf |
| 출력 | putch | cputs | cprintf |
getchar(), _getch(), _getche()
