티스토리 뷰

반응형

 

C언어 기초 Chapter 06: printf 함수와 scanf 함수 완전 정복


06-1. printf 함수 이야기

1) 기본 사용법

printf는 화면에 값을 출력하는 함수입니다.

#include <stdio.h>

int main(void) {
    printf("Hello C!\n");
    printf("정수: %d\n", 10);
    printf("실수: %f\n", 3.14);
    printf("문자: %c\n", 'A');
    printf("문자열: %s\n", "Hello");
    return 0;
}
  • %d → 정수 출력
  • %f → 실수 출력 (기본 6자리 소수)
  • %c → 문자 1개
  • %s → 문자열
  • \n → 줄바꿈

2) 출력 형식 지정자 (Format Specifier)

  • 정수
    • %d 10진수
    • %o 8진수
    • %x, %X 16진수
  • 실수
    • %f 고정 소수점
    • %e, %E 지수 표기
    • %g, %G 자동 선택
  • 기타
    • %p 포인터(주소)
    • %% 퍼센트 문자 자체 출력

3) 폭(width)과 정밀도(precision)

printf("[%5d]\n", 7);       // [    7]  → 폭 5칸, 오른쪽 정렬
printf("[%-5d]\n", 7);      // [7    ]  → 왼쪽 정렬
printf("[%08d]\n", 123);    // [00000123] → 0으로 채움
printf("[%.2f]\n", 3.14159);// [3.14]   → 소수 둘째 자리까지
printf("[%10.3f]\n", 3.14159); // [     3.142]

4) 예제 프로그램

#include <stdio.h>

int main(void) {
    int a = 123;
    double b = 3.14159;

    printf("정수 기본: %d\n", a);
    printf("정수 8진수: %o, 16진수: %x\n", a, a);
    printf("실수 소수점 둘째자리: %.2f\n", b);
    printf("실수 지수표기: %e\n", b);
    return 0;
}

06-2. scanf 함수 이야기

1) 기본 사용법

scanf는 키보드로부터 입력을 받는 함수입니다.

#include <stdio.h>

int main(void) {
    int age;
    printf("나이를 입력하세요: ");
    scanf("%d", &age);  // 변수의 주소(&) 필요
    printf("입력된 나이: %d\n", age);
    return 0;
}

⚠️ 주의: scanf("%d", age); 처럼 &를 빼먹으면 오류 발생


2) 여러 개 입력받기

int a, b;
scanf("%d %d", &a, &b);
printf("a=%d, b=%d\n", a, b);

입력: 10 20 → 출력: a=10, b=20


3) 문자와 문자열 입력

char c;
char str[20];

scanf(" %c", &c);     // 공백 제거용 " " 추가
scanf("%19s", str);   // 최대 19자, 마지막에 '\0' 자동 추가

4) 입력 시 흔한 문제

  • 개행 문자 문제
    • 정수 입력 후 char 입력 시 \n이 버퍼에 남아 문제가 됨
    • 해결: " %c" 처럼 앞에 공백 추가
  • 버퍼 오버플로
    • 문자열 입력 시 배열 크기보다 큰 데이터 입력 시 오류
    • 해결: %ns 형식 지정자 사용 (예: %19s)

5) 예제 프로그램

#include <stdio.h>

int main(void) {
    int x, y;
    char name[20];

    printf("두 정수를 입력하세요: ");
    scanf("%d %d", &x, &y);

    printf("이름을 입력하세요: ");
    scanf("%19s", name);

    printf("합: %d, 차: %d\n", x+y, x-y);
    printf("입력한 이름: %s\n", name);
    return 0;
}

핵심 정리 ✅

  • printf는 출력 함수, scanf는 입력 함수
  • 형식 지정자변수 타입을 반드시 맞추어야 함
  • scanf에서는 주소(&) 가 꼭 필요 (문자열 제외)
  • 개행 문자 문제와 버퍼 오버플로 주의

연습 문제 ✍️

  1. 사용자에게 정수 2개를 입력받아 합, 차, 곱, 나눗셈 결과를 모두 출력하세요.
  2. 섭씨 온도를 입력받아 화씨로 변환하세요.
    • 공식: F = C * 9/5 + 32
  3. 이름과 나이를 입력받아 "안녕하세요, OOO님! 나이는 XX살이군요." 출력하세요.

 

반응형