Skip to main content

Command Palette

Search for a command to run...

printf, scanf

Updated
3 min readView as Markdown

printf 함수 이야기

특수문자의 출력이 필요한 이유

  • 문자열에 포함이 되는 특수문자는 작은 따옴표로 묶어서 독립된 문자상수로도 존재할 수 있다.

⁠char ch='\n';

  • 큰 따옴표는 문자열의 시작과 끝으로 해석이 되니, 큰 따옴표 자체의 출력을 원하는 경우에는 큰 따옴표 앞에 \ 문자를 붙이기로 함

⁠printf("앞집 강아지가 말했다. \"멍~! 멍~!\" 정말 귀엽다.");

printf 함수의 서식지정

  • printff는 formatted(서식이 지정된)을 의미 즉, 서식이 지정된 형태의 출력

  • 출력양식이 만들어진 상태에서 출력을 진행한다

“제 나이는 10진수로 12살, 16진수로 C살입니다.”

⁠"제 나이는 10진수로 %d살, 16진수로 %X살입니다." // 대문자 X면 알파벳 대문자, 소문자 x면 알파벳 소문자

서식 문자의 종류와 그 의미

  • %d = char, short, int

  • %ld = long

  • %lld = long long

  • %u = unsigned int(부호 없는 10진수 정수)

  • %o = unsigned int (부호 없는 8진수 정수) 8진수를 8진수답게 출력하려면 %#o

  • %x, %X = unsigned int(부호 없는 16진수 정수) 16진수를 16진수답게 출력하려면 %#x

  • %f = float, double

  • %Lf\= long double

  • %e, %E = float, double(e 또는 E 방식의 부동소수점 실수)

  • %g, %G = float, double(값에 따라 %f와 %e 사이에서 선택)

  • %c = char, short, int(값에 대응하는 문자)

  • %s = char *(문자열)

  • %p = void *(포인터의 주소 값)

필드 폭을 지정하여 정돈된 출력 보이기

  • 출력의 형태는 기본적으로 오른쪽 정렬이다!

  • %8d = 필드 폭을 8칸 확보하고, 오른쪽 정렬해서 출력을 진행한다.

  • %-8d = 필드 폭을 8칸 확보하고, 왼쪽 정렬해서 출력을 진행한다.

#include <stdio.h>

int main(void)
{
    printf("%-8s %14s %8s \n", "이  름", "전공학과", "학년");
    printf("%-8s %14s %5d \n", "김동수", "전자공학", 3);
    printf("%-8s %14s %5d \n", "이을수", "캄퓨터공학", 2);
    printf("%-8s %14s %5d \n", "한선영", "미술교육학", 4);
    return 0;
}
// 결과
이  름   전공학과   학년 
김동수   전자공학     3 
이을수 캄퓨터공학     2 
한선영 미술교육학     4

scanf 함수

정수 기반의 입력형태 정의

  • scanf 함수는 printf 함수의 상대적인 기능

    • 어떻게 받아들일 거니?

    • 어디에 저장할까?

  • %d = 10진수 정수의 형태로 데이터를 입력 받는다.

  • %o = 8진수 양의 정수의 형태로 데이터를 입력 받는다.

  • %x = 16진수 양의 정수의 형태로 데이터를 입력 받는다.

#include <stdio.h>

int main(void)
{
    int num1, num2, num3;
    printf("세 개의 정수 입력: ");
    scanf("%d %o %x", &num1, &num2, &num3);

    printf("입력된 정수 10진수 출력: ");
    printf("%d %d %d \n", num1, num2, num3);
    return 0;
}

// 결과
세 개의 정수 입력: 12 12 12 // 똑같은 정수 12를 입력해도, 실제 저장되는 값에는 차이가 있다.
입력된 정수 10진수 출력: 12 10 18

실수 기반의 입력형태 정의

  • printf에서는 %f, %e, %g의 의미가 각각 달랐지만, scanf 함수에서는 ‘float형 데이터를 입력 받겠다' 라는 동일한 의미를 담고 있다.

  • %lf = double

  • %Lf = long double

#include <stdio.h>

int main(void)
{
    float num1;
    double num2;
    long double num3;

    printf("실수 입력1(e 표기법으로): ");
    scanf("%f", &num1);
    printf("입력된 실수 %f \n", num1);

    printf("실수 입력2(e 표기법으로): ");
    scanf("%lf", &num2);
    printf("입력된 실수 %f \n", num2);

    printf("실수 입력3(e 표기법으로): ");
    scanf("%Lf", &num3);
    printf("입력된 실수 %Lf \n", num3);
    return 0;
}

// 결과
실수 입력1(e 표기법으로): 1.1e-3
입력된 실수 0.001100 
실수 입력2(e 표기법으로): 0.1e+2
입력된 실수 10.000000 
실수 입력3(e 표기법으로): 0.17e-4
입력된 실수 0.000017
  • 위 결과를 바탕으로 알 수 있는 점

    • 실수의 입력과정에서 e 표기법을 사용해도 된다.

    • float, double, long double의 데이터 출력에 사용되는 서식문자는 각각 %f, %f, %Lf이다.

    • float, double, long double의 데이터 입력에 사용되는 서식문자는 각각 %f, %lf, %Lf이다.

  • 서식문자 %s가 문자열의 입력에 사용된다.

More from this blog

선행처리기와 매크로

선행처리는 컴파일 이전의 처리를 의미 선행처리는 선행처리기에 의해서, 컴파일은 컴파일러에 의해서, 링크는 링커에 의해서 진행 소스파일 → 선행처리기 → 선행처리 거친 소스파일 → 컴파일러 → 오브젝트 파일 → 링커 → 실행파일 컴파일 과정을 거치게 되면 바이너리 데이터로 이루어진 오브젝트 파일이 생성 선행처리기가 하는 일 삽입해 놓은 선행처리 명령문대로 소스코드의 일부를 수정 여기서 수정이란, 단순 치환의 형태 /* 간단한 선행처리 명령문 */...

Oct 10, 20246 min read

C 언어의 메모리 구조

프로그램을 실행하면 해당 프로그램의 실행을 위한 메모리 공간이 운영체제에 의해서 미리 마련 그리고 바로 이 메모리 공간 내에서 변수가 선언되고, 문자열이 선언되는 것 메모리의 구성 프로그램 실행 시 운영체제에 의해서 마련되는 메모리의 구조는 네 개의 영역으로 구분 코드 영역 / 데이터 영역 / 힙 영역 / 스택 영역 메모리 공간을 나눠놓은 이유는 유사한 성향의 데이터를 묶어서 저장을 하면, 관리가 용이해지고 메모리의 접근속도가 향상 메모리 영역...

Oct 9, 20246 min read

파일과 스트림(Stream), 그리고 기본적인 파일의 입출력

저기 저 파일에 저장되어 있는 데이터를 읽고 싶어요. 프로그램 상에서 파일에 저장되어 있는 데이터를 참조하길 원한다고(읽기 원한다고) 가정했을 때, 우리가 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 데이터가 이동할 수 있는 다리를 놓는 일을 먼저 해야 한다. 이러한 데이터 이동의 경로가 되는 다리를 가리켜 ‘스트림(stream)’이라 함. 스트림이라는 것은 운영체제에 의해서 형성되는 소프트웨어적인 상태를 의미하는 것 따라서, ...

Oct 8, 20249 min read

JinGood

31 posts