2025. 2. 25. 15:28ㆍ프로그래밍 언어/C
14.3 메모장 프로그램
동적 메모리 할당과 파일 입출력을 활용하여 메모장 기능을 구현합니다.
✅ 프로그램 주요 기능
- 메모 입력 후 파일에 저장
- 파일에 저장된 메모 불러오기
- 기존 메모에 내용 추가
- 메모 삭제 (파일 초기화)
- 동적 메모리 할당을 사용하여 메모 크기 제한 없음
1. 동적 메모리 할당을 활용한 메모 저장 기능
메모는 길이가 정해져 있지 않기 때문에, 동적 메모리 할당(malloc())을 사용하여 메모 크기를 유동적으로 조절합니다.
📌 메모 입력 후 파일에 저장하는 기능
#include <stdio.h>
#include <stdlib.h>
#define FILE_NAME "memo.txt"
// 메모 입력 및 파일 저장
void saveMemo() {
FILE *fp = fopen(FILE_NAME, "w"); // 새로 작성 모드("w")
if (fp == NULL) {
printf("파일을 열 수 없습니다.\n");
return;
}
char *memo;
size_t size = 1024; // 초기 크기 설정
memo = (char *)malloc(size * sizeof(char));
if (memo == NULL) {
printf("메모리 할당 실패\n");
fclose(fp);
return;
}
printf("메모 입력 (종료: Ctrl + D 또는 빈 줄 입력 후 Enter):\n");
size_t len = 0;
while (fgets(memo + len, size - len, stdin) != NULL) {
len += strlen(memo + len);
if (len > size - 50) { // 크기 확장 필요 시 증가
size *= 2;
memo = (char *)realloc(memo, size);
if (memo == NULL) {
printf("메모리 재할당 실패\n");
fclose(fp);
return;
}
}
}
fprintf(fp, "%s", memo); // 파일에 저장
free(memo);
fclose(fp);
printf("메모가 저장되었습니다.\n");
}
✅ 동적 메모리(malloc(), realloc())를 활용하여 입력한 메모 크기를 자동 확장
✅ 파일(memo.txt)에 저장하여 프로그램 종료 후에도 데이터 유지
2. 저장된 메모 불러오기 (파일에서 읽기)
파일(memo.txt)에 저장된 메모를 불러와 출력하는 기능을 추가합니다.
📌 파일에서 읽어 메모 출력
// 메모 불러오기
void loadMemo() {
FILE *fp = fopen(FILE_NAME, "r"); // 읽기 모드("r")
if (fp == NULL) {
printf("저장된 메모가 없습니다.\n");
return;
}
char ch;
printf("\n===== 저장된 메모 =====\n");
while ((ch = fgetc(fp)) != EOF) { // 한 글자씩 읽어 출력
putchar(ch);
}
fclose(fp);
}
✅ 파일 모드 "r"을 사용하여 memo.txt에서 데이터를 읽음
✅ fgetc()를 이용해 한 글자씩 출력하여 메모 내용을 표시
3. 기존 메모에 내용 추가
기존 메모를 유지하면서 새로운 내용을 추가하는 기능을 구현합니다.
📌 파일 끝에 새로운 내용을 추가하는 기능
// 기존 메모에 추가
void appendMemo() {
FILE *fp = fopen(FILE_NAME, "a"); // 추가 모드("a")
if (fp == NULL) {
printf("파일을 열 수 없습니다.\n");
return;
}
char *memo;
size_t size = 1024;
memo = (char *)malloc(size * sizeof(char));
if (memo == NULL) {
printf("메모리 할당 실패\n");
fclose(fp);
return;
}
printf("추가할 메모 입력 (종료: Ctrl + D 또는 빈 줄 입력 후 Enter):\n");
size_t len = 0;
while (fgets(memo + len, size - len, stdin) != NULL) {
len += strlen(memo + len);
if (len > size - 50) {
size *= 2;
memo = (char *)realloc(memo, size);
if (memo == NULL) {
printf("메모리 재할당 실패\n");
fclose(fp);
return;
}
}
}
fprintf(fp, "%s", memo);
free(memo);
fclose(fp);
printf("메모가 추가되었습니다.\n");
}
✅ 파일 모드 "a"(append) 사용 → 기존 내용 유지 후 새로운 메모 추가
✅ 동적 메모리 할당을 활용하여 긴 메모도 입력 가능
4. 메모 삭제 (파일 초기화)
파일(memo.txt)의 내용을 초기화하는 기능을 추가합니다.
📌 파일 초기화 기능
// 메모 삭제 (파일 초기화)
void deleteMemo() {
FILE *fp = fopen(FILE_NAME, "w"); // 빈 파일 생성 (기존 내용 삭제)
if (fp == NULL) {
printf("파일을 열 수 없습니다.\n");
return;
}
fclose(fp);
printf("메모가 삭제되었습니다.\n");
}
✅ 파일 모드 "w"(write)로 열어 빈 파일을 생성하면 기존 데이터 삭제됨
✅ 메모를 삭제할 수 있는 간단한 기능 추가
5. 전체 기능을 포함한 메인 함수
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FILE_NAME "memo.txt"
void saveMemo();
void loadMemo();
void appendMemo();
void deleteMemo();
int main() {
int choice;
while (1) {
printf("\n===== 메모장 프로그램 =====\n");
printf("1. 새 메모 작성\n");
printf("2. 저장된 메모 보기\n");
printf("3. 기존 메모에 추가\n");
printf("4. 메모 삭제\n");
printf("5. 종료\n");
printf("메뉴 선택: ");
scanf("%d", &choice);
getchar(); // 입력 버퍼 비우기
switch (choice) {
case 1: saveMemo(); break;
case 2: loadMemo(); break;
case 3: appendMemo(); break;
case 4: deleteMemo(); break;
case 5: printf("프로그램을 종료합니다.\n"); return 0;
default: printf("잘못된 입력입니다. 다시 선택하세요.\n");
}
}
}
✅ 메뉴를 반복 표시하여 사용자가 원하는 기능을 선택 가능
✅ 입력값을 기반으로 switch-case 문을 사용하여 적절한 기능 호출
6. 실행 예시
===== 메모장 프로그램 =====
1. 새 메모 작성
2. 저장된 메모 보기
3. 기존 메모에 추가
4. 메모 삭제
5. 종료
메뉴 선택: 1
메모 입력 (종료: Ctrl + D 또는 빈 줄 입력 후 Enter):
오늘의 할 일
- C 프로그래밍 공부
- 운동 가기
- 책 읽기
메모가 저장되었습니다.
메뉴 선택: 2
===== 저장된 메모 =====
오늘의 할 일
- C 프로그래밍 공부
- 운동 가기
- 책 읽기
메뉴 선택: 3
추가할 메모 입력 (종료: Ctrl + D 또는 빈 줄 입력 후 Enter):
- 새로운 목표 추가
메모가 추가되었습니다.
메뉴 선택: 4
메모가 삭제되었습니다.
7. 정리
기능 | 설명 |
메모 저장 | 사용자가 입력한 메모를 파일(memo.txt)에 저장 |
메모 불러오기 | 저장된 메모를 불러와 출력 |
메모 추가 | 기존 메모에 새로운 내용 추가 |
메모 삭제 | 파일 초기화를 통해 모든 메모 삭제 |
📌 파일 입출력을 활용하여 데이터를 영구적으로 저장
📌 동적 메모리 할당을 통해 메모 길이 제한 없이 입력 가능
📌 간단한 메뉴를 제공하여 메모 관리 가능
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 초급 - 14장: 예제 프로젝트 및 실습 (14.2 학생 성적 관리 프로그램) (0) | 2025.02.25 |
---|---|
C언어 초급 - 14장: 예제 프로젝트 및 실습 (14.1 계산기 프로그램 만들기) (0) | 2025.02.24 |
C언어 초급 - 13장: 구조체와 공용체 (13.2 공용체 (union)) (0) | 2025.02.24 |
C언어 초급 - 13장: 구조체와 공용체 (13.1 구조체 (struct)) (0) | 2025.02.24 |
C언어 초급 - 12장: 파일 입출력 (12.3 바이너리 파일 읽기/쓰기) (0) | 2025.02.24 |