-
해당 내용에 포함된 강의 자료 사진들의 출처는 smile han의 c언어 교재
함수에 입력시키는 것을 argument(전달인자), argument를 받을
변수를 매개변수(parameter)
함수가 돌려주는 결과 값을 반환값(return value)이라고 함
printf() 표준 출력 함수
printf()함수의 여러가지 사용 예
printf()함수의 서식 지정필드
printf()함수는 괄호의 큰 따움표 안에 다양한 서식 지정필드,또는 서식 지정자들이 다음과 같은 형태로 올 수 있음
%가 있으면 서식 지정자는 반드시 있어야함
printf()함수의 [정렬]부분
-,+,#,0
-는 왼쪽 정렬을 의미함,없으면 디폴트로 오른쪽 정렬
+는 양수의 경우 +부호를 표시 하도록 함
#의 경우 출력값을 특별한 형태로 변경 시킴
%#o 경우 8진수 앞에 0을 더 붙임
%#x 경우 16진수 앞에 0x를 추가
%#e, %#f는 소수점 뒤가 숫자가 없더라도 소수점을 출력시킴
0은 공백을 0으로 채움.
printf()함수의 [폭]부분ㄱ
수, *로 출력값의 최소폭 지정
폭 지정이 없을 경우 출력할 데이터의폭이 맞추어짐, 폭 지정을 하면 지정한폭만큼 자리를 차지함
예: printf("%5d",12);를 할 경우 공백3칸과 12로 이루어짐,
예: printf("%05d",12);의 경우 공백 자리를 0으로 채움, 00012
예: printf("%*d,3,12);의 경우 12를 %3d로 출력하라는 의미
출력폭을 지정하는 부분을*로 쓰고 매개변수(여기서는 3)로 조절 할 수 있음
printf()함수의 [.정밀도]부분
소수점도 한 자리를 차지함.
소수점이하 자리수를 조절 할 수 있음.
예:%5.2f의 경우, 전체자리는 5자리. 소수점 이하의 자리는 2자리
printf()함수의 [크기]부분
ll의 경우 int형이 long long 형임을 나타냄
L은 실수형이 long double형임을 나타냄
c언어에서는 %f와 %lf와 같음
c++에서는 float는 %f double형은 %lf를 구분하여사용함
z는 sizeof()연산자의 반환값을 출력할때 사용
표준 입력 함수 scanf()
scanf의 함수 서식 지정자는 대부분 동일하지만 실수형 입력은 %f가 아닌 %lf로 입력하여야 함
scanf()함수 형식 예
%다음에 *를 쓰면 입력한 내용을 버리라는 것
예: scanf("%*d %d", &num);을 입력시 첫번째 서식 지정자에 입력받는 수는 무시하고 두번째 입력 받은 수를
num에 저장
scanf()함수의 [폭]부분
정수값을 지정하여 읽어들일 최대 길이를 지정
예:%3d로 입력받으면 입력받는 숫사 중 처음3개만 입력받음
12345를 입력하면 123만 받아들임
scanf()함수의 [크기]부분
ll은 정수형이 long long
l은 정수형은 long형,실수형은 double형
L은 실수형이 long double형
scanf함수를 사용할때는 &(앰퍼샌드)기호 변수의 주소를 얻을때 사용하는 연산자를사용하여야 함
문자열일 (char배열) 경우 제외
비쥬얼스튜디오 경우
보안이 강화된 c 언어 함수 사용을 권장하기 때문
scanf 경우 문자열을 입력 받을때 오버플로우 위험이 있음
scanf_s 사용을 권장하지만 타 컴파일러에서 사용이 안될 가능성이 있음.
해결법으로는
보안 버전인함수 scanf_s사용
#define _CRT_SECURE_NO_WARNINGS를 사용하여 경고 무시하기
직접 비쥬얼 스튜디오 설정에 가 경고를 끌 수 있음.
scanf_s의 경우 scanf와 정수,실수는 동일하게 입력하지만
문자열과 문자형 경우 버퍼 크기를 요구하기 때문에
버퍼 크기를 입력해주어야함
문자형일 경우
문자열일 경우
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(void){char ch1,ch2,ch3;printf("1문자를 입력하세요=>");scanf("%c",&ch1); //%c는 한 문자를 키보드 버퍼에서 가져옴printf("2문자를 입력하세요=>");scanf("%c",&ch2); // 엔터나 스페이스도 하나의 문자printf("3문자를 입력하세요=>");scanf("%c",&ch3);printf("\n입력한 3개의 문자는 %c %c %c\n",ch1,ch2,ch3);return 0;}위 소스의 경우 ch2변수의 ch1변수에 엔터로 문자 입력 후 엔터가 저장되어char2에 엔터가 저장되어 버림이런경우#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(void){char ch1,ch2,ch3;printf("1문자를 입력하세요=>");scanf("%c",&ch1); //%c는 한 문자를 키보드 버퍼에서 가져옴getchar(); //엔터 입력받음printf("2문자를 입력하세요=>");scanf("%c",&ch2); // 엔터나 스페이스도 하나의 문자getchar(); //엔터 입력받음printf("3문자를 입력하세요=>");scanf("%c",&ch3);getchar(); //엔터 입력받음printf("입력한 3개의 문자는 %c %c %c\n",ch1,ch2,ch3);return 0;}위 소스 처럼 getchar를 사용해 엔터를 입력받게 한 후 따로 변수에
저장하지 않는 방법으로 엔터를 버릴 수 있음
getchar의 경우 문자형 하나만 입력 받을 수 있어
문자형 하나만 사용할때는 실행파일이 커지지 않도록 scanf대신 getchar를 사용함
scanf는 문자열로 사용 할 경우 공백 사용시 공백 사용 전 까지만 입력받을 수 있음
기타 콘솔 입출력 함수
C 언어에서는 20여 개의 입출력 함수가 있음
콘솔 출력으로 printf()함수를,콘솔 입력으로 scanf()함수를 만능 함수처럼 사용하지만 이 함수들은 사용법이 복잡하고 함수의 사이즈도 큼.
사용자 편의,처리속도 향상, 실행 파일 크기 감소를 위해 컴파일러 마다 다양한 함수를 제공
버퍼형 콘솔 입출력 함수
버퍼에 데이터를 모아 두었다가 한꺼번에 전송
"stdio.h"에 선언되어 있음
직접 콘솔 입출력 함수
버퍼를 거치지 않고 데이터를 얻는 즉시 입출력
"conio.h"에 선언 되어 있는 함수들
ANSI C 표준 라이브러리 함수는 아님.
입력한 순간 바로 실행하므로 입력한 내용의 수정이 불가능
실습문제
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(void){int kor, eng, mat,total;double avg;printf("총점과 평균을 구하는 프로그램입니다.\n");printf("국어 점수를 입력하고 Enter를 누르세요=");scanf("%d", &kor);printf("영어 점수를 입력하고 엔터를 누르세요=");scanf("%d", &eng);printf("\n수학 점수를 입력하고 Enter를 누르세요=");scanf("%d", &mat);total = kor + eng + mat;avg = total / 3.0;printf("당신의 총점은 %d 이고, 평균은 %.2f 입니다.\n", total, avg);return 0;}출력값