C언어 : 4. 문자열과 입출력

2026. 5. 18. 21:54·C/Study

안녕하세요.

이번에는 문자열을 간단하게 정리 후 입출력 관련된 부분들을 정리해보겠습니다.

 

1. 문자열

 1) 의미

  • 문자열이란 문자의 연속을 말합니다.
  • 따라서 char 형의 연속이라고 할 수 있고, char 형 배열이라고 부릅니다.

 2) 배열이란?

  • 배열이란 여러 개의 메모리 셀이라고 할 수 있습니다.
  • 배열은 동일한 데이터형(int, char 등)을 가진 데이터들이 메모리에 순서대로 나열되어 있는 것을 말합니다.
  • 배열의 선언은 아래와 같이 할 수 있습니다.
자료형 변수명[배열크기];

int num[10];
  • 배열의 이해가 제대로 되어야 문자열을 제대로 이해할 수 있으니 여기서는 문자열이란 문자의 연속이고, 입출력함수로 표현을 할 용도로만 이해하고 넘어가면 좋을 것 같습니다.

 3) \0(널 문자)

  • 문자열(char 형 배열)의 끝을 의미합니다.
  • 따라서 문자열의 끝을 알리기 위해서는 반드시 널 문자가 포함되어야 합니다.

 4) 사용방법

  • 선언과 동시에 초기화하는 경우
char name1[] = "Alice";

> 이 경우 배열의 크기를 명시하지 않아도 문자열의 크기를 자동으로 계산합니다.

  • 입력으로 초기화하는 경우
char name2[20];
scanf("%s", name2);

> 이 경우 입력 문자열의 크기보다 크게 배열의 크기를 명시해주어야 합니다.


2. printf()

 1) 의미

  • 어떤 데이터를 출력하기 위한 함수

 2) 변환 지정자

  • printf() 함수는 int(정수형), float(부동소수점형), char(문자형) 등 여러가지 데이터를 변환 지정자를 통해 구분하고, 이를 출력합니다.
변환 지정자 출력 데이터형
%c 문자
%d 부호 있는 10진수
%u 부호 없는 10진수
%o 부호 없는 8진수
%x 부호 없는 16진수
%s 문자열

 

 2.1) 변환 지정자 사용구조

  • printf() 는 출력될 문자들과 변환 지정자 및 변수의 조합으로 사용됩니다.
int age = 40; // 정수형 변수
printf("My age is %d", age); // 출력될 문자들과 변환 지정자 및 변수

 

 2.2) 변환 지정자 예(test.c)

#include <stdio.h>

int main(void)
{
    char ch = 'A';
    int num = 100;
    unsigned int unum = 3000000000;
    int oct = 10;
    int hex = 255;
    char str[] = "Hello C";

    // %c : 문자 출력
    printf("%%c : %c\n", ch);

    // %d : 부호 있는 10진수 정수 출력
    printf("%%d : %d\n", num);

    // %u : 부호 없는 10진수 정수 출력
    printf("%%u : %u\n", unum);

    // %o : 8진수 출력
    printf("%%o : %o\n", oct);

    // %x : 16진수 출력 (소문자)
    printf("%%x : %x\n", hex);

    // %s : 문자열 출력
    printf("%%s : %s\n", str);

    return 0;
}


 3) 변경자

  • 변경자를 통해 기본적인 변환 지정을 변경할 수 있습니다.
변경자 의미
-n (플래그) 왼쪽 정렬
%nd 숫자들(n 열 만큼 너비를 설정하고, 빈 자리는 0 으로 채움)
%.nf 부동소수점 최소자릿수(n 개 만큼 소수를 표시)
%n.f 부동소수점들(n 열 만큼 너비를 설정하고, 빈 자리는 0 으로 채움)
%n.nf 위 두 개의 조합

 

 3.1) 변경자 예(test2.c)

#include <stdio.h>

int main(void)
{
    int num = 8;
    float dec = 0.314;

    // 왼쪽 정렬
    printf("%%-10d   : %-10d|\n", num);
    printf("%%-10.3f : %-10.3f|\n", dec);

    // %nd : 숫자들
    printf("%%2d : %2d|\n", num);
    printf("%%5d : %5d|\n", num);

    // %.nf : 부동소수점수 최소자릿수
    printf("%%.3f  : %.3f\n", dec);
    // %nf : 부동소수점수들
    printf("%%5f   : %5.f|\n", dec);
    // %n.nf : 위 두개의 조합
    printf("%%5.3f : %5.3f|\n", dec);


    return 0;
}


3. scanf()

 1) 의미

  • 어떤 데이터를 입력하기 위한 함수입니다.
  • printf() 처럼 다양한 포맷과 연결된 변환 지정자를 통해 데이터를 입력받습니다.

 2) 사용방법

  • 데이터를 저장할 변수 앞에는 & 키워드를 넣어 사용합니다.
  • 데이터를 저장할 변수가 배열이라면 & 키워드를 넣지 않습니다.
int num;
scanf("%d", &num);

 

 3) 형식 지정자

형식 의미
%d int
%u unsigned int
%f float
%lf double
%c char
%s 문자열

 

 4) 공백 / 엔터 무시

  • %d(int), %f(float), %s(문자열)는 자동으로 공백/엔터를 입력의 끝으로 인지합니다.
  • 특히 %s(문자열)는 공백이 포함되면 공백 전 내용만을 문자열로 인식하는 문제점이 있습니다.

 5) 공백 / 엔터 입력

  • %c 는 공백/엔터도 유효한 문자로 입력받습니다.
  • 이를 해결하기 위해 %c 앞 공백을 두게되면 이전에 입력된 엔터를 무시할 수 있습니다.

 5) 실제 예(test3.c)

#include <stdio.h>

int main(void)
{
    // 변수 선언
    int num;
    unsigned int unum;
    float fnum;
    double dnum;
    char ch;
    char str[100];

    // -----------------------------
    // 1. %d : int 입력
    // -----------------------------
    printf("정수 입력(%%d) : ");
    scanf("%d", &num);

    // -----------------------------
    // 2. %u : unsigned int 입력
    // -----------------------------
    printf("양의 정수 입력(%%u) : ");
    scanf("%u", &unum);

    // -----------------------------
    // 3. %f : float 입력
    // -----------------------------
    printf("float 입력(%%f) : ");
    scanf("%f", &fnum);

    // -----------------------------
    // 4. %lf : double 입력
    // -----------------------------
    printf("double 입력(%%lf) : ");
    scanf("%lf", &dnum);

    // -----------------------------
    // 5. %c : 문자 입력
    // -----------------------------
    printf("문자 입력(%%c) : ");
    scanf(" %c", &ch);

    // -----------------------------
    // 6. %s : 문자열 입력
    // -----------------------------
    printf("문자열 입력(%%s) : ");
    scanf("%s", str);

    // 결과 출력
    printf("\n===== 결과 =====\n");

    printf("%%d  : %d\n", num);
    printf("%%u  : %u\n", unum);
    printf("%%f  : %f\n", fnum);
    printf("%%lf : %lf\n", dnum);
    printf("%%c  : %c\n", ch);
    printf("%%s  : %s\n", str);

    return 0;
}

 

> 여기서 %c 의 경우 %lf 에서 입력 후 엔터를 공백으로 무시한 걸 알 수 있습니다.

> 여기서 %s 의 경우 "안녕하세요? ㅎㅎ" 로 공백을 포함하고 있습니다. 따라서 결과출력 시 "안녕하세요?" 만 출력되는 것을 알 수 있습니다.


+) VSCode 의 터미널이 PowerShell 인 경우 간혹 한글이 터미널 상에서 깨져보일 수 있습니다.

더보기

1)

이 경우 아래처럼 Windows 기본 터미널을 선택합니다.

2)

이후 터미널에 아래의 명령어를 입력합니다.

chcp 65001

> 해당 뜻은 한글 인코딩 방식인 UTF-8 로 터미널을 설정하겠다는 명령입니다.

 

 

 

 

 

'C > Study' 카테고리의 다른 글

C 언어 : 6. 루프 제어문  (0) 2026.05.19
C언어 : 5. 연산자  (0) 2026.05.19
C언어 : 3. 데이터형  (0) 2026.05.18
C언어 : 2. 첫 프로그램으로 보는 구조  (0) 2026.05.18
C언어 : 1. C 언어에 대하여  (0) 2026.05.17
'C/Study' 카테고리의 다른 글
  • C 언어 : 6. 루프 제어문
  • C언어 : 5. 연산자
  • C언어 : 3. 데이터형
  • C언어 : 2. 첫 프로그램으로 보는 구조
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
C언어 : 4. 문자열과 입출력
상단으로

티스토리툴바