C언어 5주차 Class
지난주 학습 내용
식별자와 명ㅁ여 규칙
리터럴 2, 3.5 'ㅁ' 'ㅌㅋㅊ' "가" 등등
기본 자료형의 종류
const 와 자동 형변환
argument parameter 인자가 프로그램에 들어가면 매개변수(parameter)로 변한다.
함수가 돌려주는 결과값을 반환값retrun valvue 라고 함.
parameter과 argument의 차이점은
파라미터는 함수 선언/정의에 사용하고 아규먼트는 함수를 호출 할때 실제로 전달하는 값이다.
c언어에서 표준 라이브러리 함수 (standard liblary function) 은
많은 함수들을 컴파일러에서지원하는데 이러한 함수들의 집합의 표준이다
도서관에서 책을 무단으로 가져오지않고 기록을 남기듯 stdio.h라는 헤더 파일을 선언해서 사용한다.
stdio.h는 표준 입출력 함수이다.
문장 문자열 출력 printf("asd")
int 형 숫자 출력 printf("%d:,20)
문장과 숫자 출력 printf("나이는%d입니다.",20)
문자과 변수(age)값 출력 printf("나이는 %d입니다.",20);
여러 변수값 출력 printf("나이=%d, 몸무게=%f",age,wight)
문자 printf("%c",'z')
문장 printf("%s",soft)
서식 지정자의미
d, i | 10진(decimal) 정수형 |
o | 8진(octal) 정수형 |
x, X | 16진(hexadecimal) 정수형 |
c | 문자 |
s | 문자열 |
u | 부호 없는 10진 정수형 |
f, F | 실수형 |
e, E | 지수형 |
g, G | e와 f 중에서 출력할 자릿수를 덜 차지하는 형태 |
p | 포인터의 번지(address)값 |
printf 함수는 괄호의 큰 따옴표 안에 다양한 서식지정필드 format spectification field 또는 서식지정자(format specifier) 들이 다음과같은 형태로 올 수 있음
%가 있으면 서식 지정자는 반드시 있어야 하며 나머지는 필요하지 않을 경우에 생략이 가능함
int main(void){
printf("%.1f",12.345);
return 0;
}
.1 <- 소수점 첫째 자리까지 반올리하여 출력
#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);
printf("%+8d%8d%8d\n", 100, -200, 300);
printf("%5d,%05d\n", 100, 100);
return 0;
}
123456789012345678901234
100-200300
100 -200 300
100 -200 300
+100 -200 300
100,00100
출력 결과
printf()함수의 %f,%e,%g
#include <stdio.h>
int main(void)
{
printf("%f\n", 100.789); // 기본 소수점 6자리 출력
printf("%e\n", 100.789); // 지수형 출력
printf("%g\n", 100.789); // %e 또는 %f 중 간결한 형태 선택
printf("%5.1f\n", 100.789); // 전체 5칸, 소수점 이하 1자리
printf("%.2f\n", 100.789); // 소수점 이하 2자리만 출력
return 0;
}
int main(void){
printf("\n%c%c%c\n", 'Y', 'e', 's');
return 0;
}
출력 Yes
서식 지정자의미
d, i | 10진(decimal) 정수형 |
o, O | 8진(octal) 정수형 |
x, X | 16진(hexadecimal) 정수형 |
c | 문자 |
s | 문자열 |
u | 부호 없는 10진 정수형 |
f, F | 실수형 (double형은 %lf) |
e, E | 지수형 |
g, G | e와 f 중에서 출력할 자릿수를 덜 차지하는 형태 |
p | 포인터의 번지(address) 값 |
prinft scanf 의 %d는 똑같은데 scanf에는 하나를 더 써야한다
바로 주소연산자인데 실수하지 않도록 하자
int main(void){
int x;
printf("수를 입력하세요=");
scanf("%d",x);
printf("%d",x);
return 0;
}
여기서sacnf 에 &(앰퍼센트)가 있어야한다
오류를 없애기 위해서 사용하는 문구인데 반드시 1번째 줄에 작성을 해주어야한다.
int main(void){
double x;
printf("수를 입력하세요=");
scanf("%lf",&x);
printf("%lf", x);
return 0;
}
float는 lf로 꼭 입력을 받아야한다.
scanf에서는 %lf !!!!!!!!!!
인치구하기
int main(void){
int num;
printf("인치를 입력하세요 =>");
scanf("%d", &num);
printf("%d인치는 %f cm입니다.",num,num*2.54);
// %f는 실수형을 나타내는 포맷이다.
return 0;
}
scanf가 너무 취약해서 새로운 함수를 만들었는데
그게 scanf_s다
두개의 수를 입력받아 평균구해보기
int main(void){
int n1, n2;
printf("숫자 두 개를 입력해주세요 : ");
scanf("%d %d",&n1,&n2);
//나누기를 할때는 항상 .0을 붙여야한다.
printf("입력받은 두 수는 %d, %d 이고, 평균은 %.1f입니다.\n",n1,n2,(n1+n2)/2.0);
return 0;
}
주의할 점은 나눗셈은 소수가 있기때문에 %f를 써주며 나눌때도 /2.0을 써주어야 한다.
scanf + getchar()
int main(void){
char ch1,ch2,ch3 ;
printf("1문자를 입력해주세요");
scanf("%c",&ch1);
getchar();
//getchar()는 버퍼에 남아있는 개행문자를 제거하기 위해 사용한다.
printf("2문자를 입력해주세요 ");
scanf("%c",&ch2);
getchar();
printf("3문자를 입력해주세요 ");
scanf("%c",&ch3);
getchar();
printf("입력한 3개의 문자는 %c, %c, %c입니다.\n",ch1,ch2,ch3);
// %c는 문자형을 나타내는 포맷이다.
}
getchar를 사용하는 이유
- 사용자가 키보드로 문자를 입력한뒤 엔터를 치면
- 입력한 문자는 ch에 저장 되지만
- 엔터키\n은 입력 버퍼어 남아있기때문이다
그래서 다음 스캔이 남아있는 \n을 바로 읽어버려 사용자가 입력하기도 전에 ch2에 \n이 들어가게 된다.
문자 하나 입력받는 전용 함수 : getchar()
int main(void){
char ch1;
printf("1문자를 입력하세요 =>");
// scanf("%c",&ch1);
ch1 = getchar();
printf("입력한 문자는 %c입니다.",ch1);
// %c는 문자형을 나타내는 포맷이다.
}
//문자만 입력받을때는 getchar()를 사용해야한다.
int main(void){
char ch1, ch2, ch3;
printf("문자를 입력하세요 = ");
printf("문자 3개를 스페이스로 구분해 입력하세요 = ");
scanf("%c %c %c", &ch1, &ch2, &ch3);
printf("입력한 문자 3개는 %c, %c, %c입니다.\n", ch1, ch2, ch3);
return 0;
}
한번에 입력받는건 좋지못하며
띄어쓰기가 아닌 - _+ 를 사용해도 된다 입력할떄도 똑같이 써줘야한다
%s 받기
int main(void){
char name[10]; //배열
printf("이름을 입력해주세요 : ");
scanf("%s", name);
printf("당신의 이름은 %s 입니다. ");
// %s는 문자열을 나타내는 포맷이다.
return 0;
}
scanf로 %s를 배열 10으로 받는데 이 이상을 넘어가는 수를 받으면 오류가 나온다
해서
int main(void){
char name[10]; //배열
printf("이름을 입력해주세요 : ");
scanf("%9s", name);
printf("당신의 이름은 %s 입니다. ");
// %s는 문자열을 나타내는 포맷이다.
return 0;
}
9를 추가해 배열이 넘어가는걸 방지할 수 있다.
putchar() 함수
int main(void){
char ch = 'A';
putchar(ch); //A char형 변수 출력
putchar('B' ); // A 문자 리터럴 출력
putchar(65); // A 숫자는 해당 아스키코드 문자 출력
return 0;
}
이름이나 공백을 입력받을때는 gets_s를 사용하는것이 안전하다.
문자열을 출력할때는 puts라는 함수도 있다.