카테고리 없음

C언어 5주차 Class

NetStat 2025. 4. 7. 16:43
반응형

지난주 학습 내용

식별자와 명ㅁ여 규칙

리터럴 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 ef 중에서 출력할 자릿수를 덜 차지하는 형태
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 ef 중에서 출력할 자릿수를 덜 차지하는 형태
p 포인터의 번지(address) 값

 

 

prinft scanf 의 %d는 똑같은데 scanf에는 하나를 더 써야한다

바로 주소연산자인데 실수하지 않도록 하자 

int main(void){

    int x; 

    printf("수를 입력하세요=");
    scanf("%d",x);
   
    printf("%d",x);
	 return 0;
}

여기서sacnf 에 &(앰퍼센트)가 있어야한다

 

#define _CRT_SECURE_NO_WARNINGS
//

오류를 없애기 위해서 사용하는 문구인데 반드시 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라는 함수도 있다.

 

 

반응형