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)**을 어떻게 다루는지도 알아볼 거예요! 😄
궁금한 점이 있다면 언제든지 댓글로 남겨주세요! 함께 공부해요 💻✨