Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 파일 데이터를 읽어 표 형태로 출력하는 프로그램 만들기

문제 상황

C 언어를 사용하여 파일에 저장된 일련의 데이터를 읽어 들인 후, 콘솔 화면에 열(column) 또는 표(tabular) 형태로 깔끔하게 출력하는 방법을 알아보겠습니다.

해결 방법

먼저 파일을 쓰기 모드로 열어 일련의 정보를 파일에 기록한 뒤 닫습니다. 그다음 같은 파일을 다시 읽기 모드로 열어 저장된 데이터를 콘솔에 표 형태로 출력합니다.

1. 파일을 쓰기 모드로 열기

FILE *fp;
fp = fopen("sample.txt", "w");
  • 파일이 존재하지 않으면 새 파일이 자동으로 생성됩니다.
  • 파일이 이미 존재하면 기존 내용은 모두 지워지고 새로운 내용만 저장됩니다.

2. 파일을 읽기 모드로 열기

FILE *fp;
fp = fopen("sample.txt", "r");
  • 파일이 존재하지 않으면 fopen 함수는 NULL을 반환합니다.
  • 파일이 존재하면 파일에서 데이터를 성공적으로 읽어올 수 있습니다.

3. 표 형태로 출력하는 핵심 로직

콘솔에 데이터를 표 형태로 보여주는 핵심 아이디어는 간단합니다. 파일에서 한 글자씩 읽으면서 쉼표(',')를 만나면 탭 문자( )로 바꿔 출력하는 것입니다. 이렇게 하면 쉼표로 구분된 데이터가 마치 표처럼 열 단위로 정렬되어 보입니다.

while ((ch = getc(fp)) != EOF) {
    if (ch == ',')
        printf("		");
    else
        printf("%c", ch);
}

전체 프로그램 코드

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

int main() {
    char ch;
    FILE *fp;

    /* 1단계: 쓰기 모드로 파일을 열어 사용자 입력 저장 */
    fp = fopen("std1.txt", "w");
    printf("enter the text.press cntrl Z:
");
    while ((ch = getchar()) != EOF) {
        putc(ch, fp);
    }
    fclose(fp);

    /* 2단계: 읽기 모드로 파일을 열어 표 형태로 출력 */
    fp = fopen("std1.txt", "r");
    printf("text on the file:
");
    while ((ch = getc(fp)) != EOF) {
        if (ch == ',')
            printf("		");
        else
            printf("%c", ch);
    }
    fclose(fp);
    return 0;
}

실행 결과

enter the text.press cntrl Z:
Name,Item,Price
Bhanu,1,23.4
Priya,2,45.6
^Z
text on the file:
Name        Item        Price
Bhanu       1           23.4
Priya       2           45.6

코드 설명 및 참고 사항

프로그램은 두 단계로 동작합니다. 첫 번째 단계에서는 getchar()로 사용자 입력을 한 글자씩 받아 putc() 함수로 파일(std1.txt)에 기록합니다. Windows 환경에서는 Ctrl+Z, Linux/macOS 환경에서는 Ctrl+D를 눌러 입력을 종료(EOF 발생)할 수 있습니다.

두 번째 단계에서는 파일을 다시 열어 getc()로 한 글자씩 읽으며, 쉼표를 만날 때마다 탭 두 개( )를 출력해 열 간격을 넓힙니다. 그 결과 '이름, 항목, 가격'처럼 쉼표로 구분된 데이터가 정렬된 표 형태로 화면에 나타납니다.

참고로 char형 변수에 getchar()와 getc()의 반환값을 저장하면 EOF(-1)와 일반 문자를 구분하지 못하는 문제가 발생할 수 있으므로, 실무에서는 반환값을 int형 변수에 저장하는 것이 더 안전한 코딩 습관입니다.