C 기본 문법 – 파일 입출력 – 2 – 텍스트 파일 입출력

C 기본 문법 – 파일 입출력 – 2편: 텍스트 파일 입출력 쉽게 배우기

안녕하세요, 여러분! 😊
오늘은 C 언어의 파일 입출력 중에서도 가장 실용적인 텍스트 파일 입출력에 대해 다뤄볼게요!

📝 “로그 남기기”, “저장하기”, “불러오기” 같은 기능들!
사실 전부 텍스트 파일을 다루는 것에서 시작해요.

C 언어에서 텍스트 파일을 다룰 줄 안다면, 여러분은 이제 실제 데이터와 소통하는 진짜 프로그래머로 한 걸음 더 다가간 거랍니다! 그럼 천천히 같이 배워보실까요? 😊


1. 텍스트 파일이란?

  • 사람이 직접 읽고 쓸 수 있는 형태의 파일입니다.
  • .txt, .csv, .log 같은 형식이 이에 해당하죠!
  • 데이터를 **문자(문자열)**로 저장하고, 읽습니다.

📘 예: hello.txt 파일 안에 “안녕하세요”라는 문자가 저장됨


2. 파일 쓰기: fprintf() 또는 fputs()

예제 1: fprintf() 사용하기

#include <stdio.h>

int main() {
    FILE *fp = fopen("greeting.txt", "w");

    if (fp == NULL) {
        printf("파일 열기에 실패했습니다.
");
        return 1;
    }

    fprintf(fp, "안녕하세요!
");
    fprintf(fp, "C 언어 텍스트 파일 입출력 예제입니다.
");

    fclose(fp);
    printf("파일 저장 완료!
");
    return 0;
}

💡 fprintf()printf()처럼 동작하지만, 화면 대신 파일에 출력합니다.


예제 2: fputs() 사용하기

fputs("이것은 fputs로 작성된 텍스트입니다.
", fp);
  • fputs()는 줄 단위 문자열만 기록합니다.
  • 포맷팅(%d, %s 등)은 지원하지 않아요.

3. 파일 읽기: fscanf()fgets()

예제 1: fscanf()로 단어 읽기

#include <stdio.h>

int main() {
    FILE *fp = fopen("greeting.txt", "r");
    char word[50];

    if (fp == NULL) {
        printf("파일 열기 실패!
");
        return 1;
    }

    while (fscanf(fp, "%s", word) != EOF) {
        printf("읽은 단어: %s
", word);
    }

    fclose(fp);
    return 0;
}

⚠️ fscanf()공백 기준으로 데이터를 나눠 읽습니다. 줄 단위가 아니라 단어 단위예요!


예제 2: fgets()로 줄 단위 읽기

#include <stdio.h>

int main() {
    FILE *fp = fopen("greeting.txt", "r");
    char line[100];

    if (fp == NULL) {
        printf("파일 열기 실패!
");
        return 1;
    }

    while (fgets(line, sizeof(line), fp) != NULL) {
        printf("읽은 줄: %s", line);
    }

    fclose(fp);
    return 0;
}

fgets()는 줄 단위로 읽기 때문에 문장 전체를 다루기에 좋아요!


4. 사용자 입력을 텍스트 파일로 저장하는 예제

#include <stdio.h>

int main() {
    FILE *fp = fopen("memo.txt", "w");
    char input[100];

    if (fp == NULL) {
        printf("파일 열기 실패!
");
        return 1;
    }

    printf("저장할 문장을 입력하세요 (종료: 'exit'):
");
    while (1) {
        fgets(input, sizeof(input), stdin);
        if (strncmp(input, "exit", 4) == 0)
            break;

        fputs(input, fp);
    }

    fclose(fp);
    printf("입력 내용이 memo.txt에 저장되었습니다.
");
    return 0;
}

😄 stdin에서 입력받고, 텍스트 파일에 그대로 저장하는 예제입니다.


5. 텍스트 파일에서 숫자 읽고 합계 계산하기

#include <stdio.h>

int main() {
    FILE *fp = fopen("numbers.txt", "r");
    int num, sum = 0;

    if (fp == NULL) {
        printf("파일 열기 실패!
");
        return 1;
    }

    while (fscanf(fp, "%d", &num) != EOF) {
        sum += num;
    }

    fclose(fp);
    printf("총합: %d
", sum);
    return 0;
}

📄 numbers.txt 파일에 10 20 30이 들어있으면, 출력은 “총합: 60″이 됩니다.


✅ 텍스트 파일 입출력 함수 요약

함수 용도 특징
fprintf() 파일에 형식 있는 출력 printf()와 유사
fputs() 파일에 문자열 출력 줄 단위, 포맷 불가능
fscanf() 파일에서 형식 읽기 공백 단위 읽기
fgets() 파일에서 줄 단위 읽기 개행 문자까지 포함

⚠️ 텍스트 파일 입출력 시 주의사항

주의사항 설명
NULL 체크 파일 열기에 실패하면 꼭 종료 처리하기
모드 확인 "r"은 파일이 존재해야 함, "w"는 내용 삭제됨
줄 끝 `
포함 여부 |fgets()
`도 포함됨
버퍼 크기 초과 fgets()에서 버퍼보다 큰 줄은 잘려서 읽힘
문자열 비교 문자열은 == 말고 strcmp() 또는 strncmp()로 비교

마무리하며 💬

텍스트 파일 입출력은 여러분의 프로그램이 실제 세상과 연결되는 관문이에요!
단순한 데이터를 저장하거나 불러오는 데 그치지 않고,
로그 시스템, 환경 설정, 데이터 분석 도구 등 다양한 곳에서 활용되죠.

🎯 “텍스트 파일 입출력은 초보를 전문가로 이끄는 첫 관문입니다!”
여러분도 이제부터는 직접 만든 프로그램에 파일 입출력 기능을 하나씩 붙여보세요.

다음 편에서는 조금 더 깊이 들어가서 **텍스트가 아닌 이진 파일(Binary File)**을 어떻게 다루는지도 알아볼 거예요! 😄
궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 함께 공부해요 💻✨

답글 남기기