Валентин Егоров
Мастер
(1654)
5 месяцев назад
#include <stdio.h>
#include <stdlib.h>
#define MAX_FILENAME_LENGTH 100
#define MAX_TEXT_LENGTH 1000
void readFromFile(const char *filename) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("Ошибка при открытии файла.\n");
return;
}
char text[MAX_TEXT_LENGTH];
while (fgets(text, MAX_TEXT_LENGTH, file) != NULL) {
printf("%s", text);
}
fclose(file);
}
void writeToFile(const char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
printf("Ошибка при открытии файла.\n");
return;
}
printf("Введите текст (для завершения введите EOF):\n");
char text[MAX_TEXT_LENGTH];
while (fgets(text, MAX_TEXT_LENGTH, stdin) != NULL) {
fputs(text, file);
}
fclose(file);
}
int main() {
char filename[MAX_FILENAME_LENGTH];
printf("Введите имя файла: ");
scanf("%s", filename);
printf("Выберите действие:\n");
printf("1. Прочитать файл\n");
printf("2. Записать в файл\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
readFromFile(filename);
break;
case 2:
writeToFile(filename);
break;
default:
printf("Некорректный выбор.\n");
break;
}
return 0;
}
Martian Gothic
Гуру
(4044)
5 месяцев назад
#include <ncurses.h>
#include <stdlib.h>
#include <string.h>
// Максимальная длина строки и количества строк
#define MAX_LEN 1024
#define MAX_LINES 100
char *lines[MAX_LINES];
int line_count = 0;
void init_editor() {
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
}
void close_editor() {
endwin();
}
void display_editor() {
clear();
for (int i = 0; i < line_count; i++) {
mvprintw(i, 0, "%s", lines[i]);
}
refresh();
}
void edit_file() {
int ch, row = 0, col = 0;
while ((ch = getch()) != KEY_F(2)) { // F2 для сохранения и выхода
switch (ch) {
case KEY_UP:
if (row > 0) row--;
break;
case KEY_DOWN:
if (row < line_count - 1) row++;
break;
case KEY_LEFT:
if (col > 0) col--;
break;
case KEY_RIGHT:
if (col < strlen(lines[row]) - 1) col++;
break;
case KEY_BACKSPACE:
case 127:
if (col > 0) {
memmove(&lines[row][col - 1], &lines[row][col], strlen(lines[row]) - col + 1);
col--;
} else if (row > 0) {
col = strlen(lines[row - 1]);
strcat(lines[row - 1], lines[row]);
free(lines[row]);
memmove(&lines[row], &lines[row + 1], sizeof(char *) * (line_count - row));
line_count--;
row--;
}
break;
case '\n':
if (line_count < MAX_LINES) {
memmove(&lines[row + 1], &lines[row], sizeof(char *) * (line_count - row));
lines[row + 1] = strdup(&lines[row][col]);
lines[row][col] = '\0';
line_count++;
row++;
col = 0;
}
break;
default:
if (ch >= 32 && ch <= 126) { // печатаемые символы
if (col >= strlen(lines[row])) {
lines[row][col + 1] = '\0';
}
lines[row][col] = ch;
col++;
}
break;
}
display_editor();
move(row, col);
}
}
int main() {
for (int i = 0; i < MAX_LINES; i++) {
lines[i] = (char *)malloc(MAX_LEN);
memset(lines[i], 0, MAX_LEN);
}
init_editor();
line_count = 1;
display_editor();
edit_file();
close_editor();
for (int i = 0; i < MAX_LINES; i++) {
free(lines[i]);
}
return 0;
}