개요
C 언어에서 파일에 저장된 전체 텍스트를 한 줄에 한 단어씩 출력하려면 크게 두 단계를 거칩니다.
- 쓰기 모드("w")로 파일을 열고, 사용자가 Ctrl+Z(EOF 신호)를 입력할 때까지 텍스트를 파일에 기록합니다.
- 읽기 모드("r")로 파일을 다시 연 뒤, 파일에서 단어를 하나씩 읽어 각 단어를 별도의 줄에 출력하고 마지막으로 파일을 닫습니다.
핵심 로직
단어별로 출력하기 위한 핵심 로직은 다음과 같습니다.
while(fscanf(fp, "%s", word) != EOF){ // 파일에서 단어를 읽음
printf("%s\n", word); // 각 단어를 새 줄에 출력
}
fclose(fp); // 파일 닫기fscanf 함수는 형식 문자열 "%s"를 사용해 공백이나 개행 문자를 기준으로 단어를 구분하여 읽어 들입니다. 따라서 반복문 안에서 읽은 단어를 개행 문자(\n)와 함께 출력하면 자연스럽게 한 줄에 한 단어씩 화면에 나타나게 됩니다.
전체 예제 프로그램
다음은 파일의 전체 텍스트를 한 줄에 한 단어씩 출력하는 완전한 C 프로그램입니다.
#include <stdio.h>
int main(void){
int ch; // getchar/getc의 반환값은 int로 받아야 EOF와 비교 가능
FILE *fp;
char word[100];
/* 1단계: 쓰기 모드로 파일 열기 */
fp = fopen("file.txt", "w");
if(fp == NULL){
printf("파일을 생성할 수 없습니다.\n");
return 1;
}
printf("텍스트를 입력한 후 Ctrl+Z를 누르세요:\n");
while((ch = getchar()) != EOF){
putc(ch, fp); // 입력받은 문자를 파일에 기록
}
fclose(fp);
/* 2단계: 읽기 모드로 파일 열기 */
fp = fopen("file.txt", "r");
if(fp == NULL){
printf("파일이 존재하지 않습니다.\n");
return 1;
}
printf("파일의 내용:\n");
while(fscanf(fp, "%s", word) != EOF){ // 파일에서 단어 읽기
printf("%s\n", word); // 각 단어를 별도의 줄에 출력
}
fclose(fp); // 파일 닫기
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
텍스트를 입력한 후 Ctrl+Z를 누르세요:
Hi Hello Welcome To My World
^Z
파일의 내용:
Hi
Hello
Welcome
To
My
World
주요 포인트 정리
getchar(),getc()의 반환값은int형 변수에 저장해야EOF(보통 -1)와 정확하게 비교할 수 있습니다.fscanf(fp, "%s", word)는 공백과 개행 문자를 자동으로 건너뛰므로 별도의 파싱 작업 없이도 단어 단위 처리가 가능합니다.- 파일 열기 실패 여부(
fp == NULL)를 반드시 확인해야 예기치 않은 오류를 방지할 수 있습니다. - 작업이 끝나면 반드시
fclose()로 파일을 닫아 리소스 누수를 막아야 합니다.