본문 바로가기

C

5주차 수업내용

 

 

 

  • 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("%d\n", &a);

 

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()

'C' 카테고리의 다른 글

6주차 수업내용  (0) 2024.04.09
5주차 실습과제2  (0) 2024.04.02
4주차 수업내용  (0) 2024.03.26
3주차 수업내용  (0) 2024.03.19
2주차 수업내용  (0) 2024.03.12