Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с кодом пожалуйста нужно сделать до завтра(заплачу)

Игорь Вознесенский Ученик (82), открыт 2 недели назад
Нужно написать код на тему Создание текстового редактора в стиле Блокнот на языке C. Если кто-то норм поможет могу чуть накинуть на карту.
3 ответа
Валентин Егоров Мастер (1012) 2 недели назад
#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 Гуру (4007) 2 недели назад
#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;
}
Похожие вопросы