Добавление информации в файл работает неправильно - C (СИ)
Формулировка задачи:
добрый день, такая проблема возникла: если я добавляю информацию в файл и потом ее удаляю в самом файле, то следующая строка записывается не на место удаленной строки и на следующую. прошу помощи как исправить? и еще 1 вопрос почему записывает иероглифы а не русские буквы?писал setlocal(L_ALL,"Russian")
Решение задачи: «Добавление информации в файл работает неправильно»
textual
Листинг программы
#include "stdafx.h" #include <stdio.h> #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #define FILENAME "input.txt" #define SIZE 256 char naz[30]; char tip[20]; int kol_vo; int god; int cena; int deys; long int password; long int pasw; int main(void) { setlocale(LC_ALL,"Russian"); printf("Введите пароль: "); scanf("%ld",&password); pasw = 123456789; if(password!=pasw){ printf("Неверный пароль"); getch(); return 1;} else printf("Выберите действие:\n"); printf("(1)Просмотр\n"); printf("(2)Добавление\n"); printf("(3)Удаление\n"); printf("(4)Редактирование\n"); scanf("%d",&deys); char buf[SIZE] = { 0 }, *text = NULL; FILE* file = fopen("c:\\Users\\Alexandr\\Desktop\\input.txt", "rt"); size_t i = 0; text = (char*)calloc(1, sizeof(char)); switch(deys){ case(1):{ while (fgets(buf, SIZE, file) != NULL) { if (i % 2 == 0) text = (char*)realloc(text, SIZE * (i + 2)); strcat(text, buf); ++i; } printf("Название\tТип\tКол-во\tГод\tЦена\n"); printf("%s", text); fclose(file); getch(); break;} case (2) : file = fopen("c:\\Users\\Alexandr\\Desktop\\input.txt", "a"); printf("Название: \n"); scanf("%s",&naz); fprintf(file,"\n%s\t",naz); printf("Тип: \n"); scanf("%s",&tip); fprintf(file,"\t%s",tip); printf("Кол-во: \n"); scanf("%d",&kol_vo); fprintf(file,"\t\t%d",kol_vo); printf("Год: \n"); scanf("%d",&god); fprintf(file,"\t%d",god); printf("Цена: \n"); scanf("%d",&cena); fprintf(file,"\t%d",cena); fclose(file); free(text); getch(); }
Объяснение кода листинга программы
- Включаемые заголовочные файлы:
- stdafx.h
- stdio.h
- conio.h
- stdlib.h
- string.h
- locale.h
- Определение переменных и констант:
- FILENAME =
input.txt
- SIZE = 256
- naz = 30-символьный массив для хранения названия
- tip = 20-символьный массив для хранения типа
- kol_vo, god, cena, deys = 4-байтные целочисленные переменные
- password, pasw = 8-байтные целочисленные переменные
- text = указатель на 1-байтовый блок памяти
- buf = массив на 256 байтов для чтения из файла
- FILENAME =
- Основная функция программы:
- main()
- Ввод пароля:
- Считывание пароля с помощью scanf() в переменную password
- Инициализация переменной pasw значением 123456789
- Сравнение password и pasw
- Вывод сообщения об ошибке, если пароли не совпадают
- Выбор действия:
- Считывание выбора действия с помощью scanf() в переменную deys
- Вывод возможных действий
- В случае выбора действия 1 (просмотр), программа начинает читать файл и выводит каждую строку
- В случае выбора действия 2 (добавление), программа открывает файл в режиме добавления и запрашивает название, тип, количество, год и цену, которые затем записываются в файл
- В случае выбора действия 3 (удаление), программа удаляет файл
- В случае выбора действия 4 (редактирование), программа открывает файл для редактирования и запрашивает название, тип, количество, год и цену, которые затем редактируются в файле
- Управление памятью:
- Выделение памяти под переменную text с помощью calloc()
- Реализация realloc() для увеличения размера памяти text при необходимости
- Освобождение памяти под text с помощью free()
- Закрытие файла:
- Использование функции fclose() для закрытия файла после завершения работы с ним
- Ввод/вывод данных:
- Использование функций scanf() и printf() для ввода и вывода данных
- Использование функции getch() для приостановки выполнения программы до нажатия клавиши
- Ошибки и обработка исключений:
- Отсутствует обработка исключений и ошибок, кроме проверки пароля
- Связывание библиотечных функций:
- Использование стандартных библиотек, таких как stdio.h, stdlib.h, string.h, locale.h
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д