Курс — «Программирование на C для начинающих». Проекты и практические задания. #40 Проект 4: Простой текстовый редактор
Здравствуйте, дорогие друзья.
В этом разделе мы создадим простой текстовый редактор на языке C. Этот проект поможет вам закрепить знания о работе с файлами, строками, функциями и управлением памятью. Текстовый редактор будет поддерживать основные функции, такие как открытие, сохранение, редактирование и просмотр текста.
Описание проекта
Цель проекта — создать консольное приложение, которое позволяет пользователю открывать, сохранять, редактировать и просматривать текстовые файлы. Программа будет предоставлять пользователю меню для выбора действий.
Требования
- Программа должна поддерживать следующие функции:
- Открытие текстового файла.
- Сохранение текста в файл.
- Редактирование текста.
- Просмотр текста.
- Программа должна запрашивать у пользователя действия через консоль.
- Программа должна обрабатывать ошибки, такие как некорректный ввод и отсутствие файла.
Реализация проекта
Рассмотрим пошаговую реализацию простого текстового редактора.
- Создание основной структуры программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 256 #define MAX_LINES 1000 char text[MAX_LINES][MAX_LINE_LENGTH]; int line_count = 0; int main() { printf("Simple Text Editor\n"); return 0; } |
2. Функции для открытия и сохранения файла:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 256 #define MAX_LINES 1000 char text[MAX_LINES][MAX_LINE_LENGTH]; int line_count = 0; void open_file() { char filename[MAX_LINE_LENGTH]; printf("Enter filename to open: "); scanf("%s", filename); FILE *file = fopen(filename, "r"); if (file == NULL) { printf("Error: Unable to open file\n"); return; } line_count = 0; while (fgets(text[line_count], MAX_LINE_LENGTH, file) != NULL) { // Удаляем символ новой строки, если он присутствует size_t len = strlen(text[line_count]); if (len > 0 && text[line_count][len - 1] == '\n') { text[line_count][len - 1] = '\0'; } line_count++; if (line_count >= MAX_LINES) { break; } } fclose(file); printf("File opened successfully\n"); } void save_file() { char filename[MAX_LINE_LENGTH]; printf("Enter filename to save: "); scanf("%s", filename); FILE *file = fopen(filename, "w"); if (file == NULL) { printf("Error: Unable to open file for writing\n"); return; } for (int i = 0; i < line_count; i++) { fprintf(file, "%s\n", text[i]); } fclose(file); printf("File saved successfully\n"); } |
3. Функции для редактирования и просмотра текста
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 256 #define MAX_LINES 1000 char text[MAX_LINES][MAX_LINE_LENGTH]; int line_count = 0; void edit_text() { printf("Enter new text (end with an empty line):\n"); line_count = 0; while (1) { if (fgets(text[line_count], MAX_LINE_LENGTH, stdin) == NULL) { break; } // Удаляем символ новой строки, если он присутствует size_t len = strlen(text[line_count]); if (len > 0 && text[line_count][len - 1] == '\n') { text[line_count][len - 1] = '\0'; } if (strlen(text[line_count]) == 0) { break; } line_count++; if (line_count >= MAX_LINES) { break; } } printf("Text edited successfully\n"); } void view_text() { if (line_count == 0) { printf("No text available\n"); return; } for (int i = 0; i < line_count; i++) { printf("%s\n", text[i]); } } |
4. Основная функция программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 256 #define MAX_LINES 1000 char text[MAX_LINES][MAX_LINE_LENGTH]; int line_count = 0; void open_file(); void save_file(); void edit_text(); void view_text(); int main() { int choice; do { printf("\nSimple Text Editor\n"); printf("1. Open file\n"); printf("2. Save file\n"); printf("3. Edit text\n"); printf("4. View text\n"); printf("0. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); getchar(); // Считываем символ новой строки switch (choice) { case 1: open_file(); break; case 2: save_file(); break; case 3: edit_text(); break; case 4: view_text(); break; case 0: printf("Exiting...\n"); break; default: printf("Error: Invalid choice\n"); } } while (choice != 0); return 0; } |
Тестирование программы
После завершения написания программы важно протестировать её на различных входных данных, чтобы убедиться, что она работает корректно.
Примеры тестов:
- Открытие файла:
Open file -> Enter filename to open -> test.txt -> File opened successfully -> View text
- Сохранение файла:
Edit text -> Enter new text -> Save file -> Enter filename to save -> test.txt -> File saved successfully
- Редактирование текста:
Edit text -> Enter new text -> View text
- Просмотр текста:
View text
- Обработка ошибок:
Open file -> Enter invalid filename -> Error: Unable to open file
Создание простого текстового редактора — это отличный способ закрепить знания о работе с файлами, строками, функциями и управлением памятью в языке C. Этот проект помогает понять, как работать с текстовыми данными и управлять ими в программе. Вы можете расширить этот проект, добавив поддержку дополнительных функций, таких как поиск и замена текста, форматирование текста и другие полезные функции. Практика в написании таких проектов поможет вам стать более уверенным и опытным программистом на языке C.
На этом все. Всем хорошего дня!