При добавлении в существующий список, новые записи добавлять в начало - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Как сделать так, чтобы при добавлении в существующий список, новые записи добавлялись в начало?
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct spisok {char fam[20]; float tel; char god[10];} t1;
void input(FILE *); // создание нового файла
void print(FILE *); // просмотр файла
void app(FILE *); // добавление в файл
 
main()
{
    char c;
    FILE *tf;
    while (1)
    {
     puts(" 1 new spisok");
     puts(" 2 prosmotr spiska");
     puts(" 3 dobavlenie v spisok");
     puts(" 0 exit");
     c=getch();
     switch(c)
      {
        case '1':input(tf);break;
        case '2':print(tf);break;
        case '3':app(tf);break;
        case '0':return 0;
        default : puts(" neverni rezim");
        }
    }
}
void input(FILE *tf)
{
    char ch;
    tf=fopen("file1.dat","wb"); // открытие бинарного файла для записи
    printf("\n Vvod spiska\n");
    do
    {
      printf("\n familiya: ");
      scanf("%s",t1.fam);
      printf(" telefon: ");
      scanf("%f",&t1.tel);
      printf(" data: ");
      scanf("%s",&t1.god);
      fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1
      printf("\n zakonchit?  y/n \n");
      ch=getch();
    }
     while (ch != 'y');
     fclose(tf);
}
 void print(FILE *tf)
 {
   int i;
   tf=fopen("file1.dat","rb"); // открытие бинарного файла для чтения
   i=1;
   fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1
   while (!feof(tf))
   {
    printf("\n  %3d familiya %20s  telefon %1.0f   data %10s \n",i,t1.fam,t1.tel,t1.god);
    fread(&t1,sizeof(t1),1,tf);
    i++;
    }
    getch();
}
void app(FILE *tf)
{
    char ch;
    tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
    printf("\n  Vvod spiska \n");
    do
    {
        printf("\n familiya: ");
        scanf("%s",t1.fam);
        printf(" telefon: ");
        scanf("%f",&t1.tel);
        printf(" data: ");
        scanf("%s",&t1.god);
        fwrite(&t1,sizeof(t1),1,tf);
        printf(" zakonchit?  y/n \n");
        ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
}

Решение задачи: «При добавлении в существующий список, новые записи добавлять в начало»

textual
Листинг программы
void app(FILE *tf)
{
    char ch;
    tf=fopen("file1.dat","ab"); // открытие бинарного файла для добавления
    printf("\n  Vvod spiska \n");
    do
    {
        printf("\n familiya: ");
        scanf("%s",t1.fam);
        printf(" telefon: ");
        scanf("%f",&t1.tel);
        printf(" data: ");
        scanf("%s",&t1.god);
        fwrite(&t1,sizeof(t1),1,tf);
        printf(" zakonchit?  y/n \n");
        ch=getch();
    }
    while (ch != 'y');
    fclose(tf);

Объяснение кода листинга программы

  1. Объявлены переменные:
    • ch - символ, используется для проверки условия в цикле do-while;
    • tf - указатель на файл, по умолчанию имеет значение NULL;
    • t1 - структура, используемая для хранения данных;
    • fam - строка, элемент структуры t1, предназначенный для хранения фамилии;
    • tel - float, элемент структуры t1, предназначенный для хранения номера телефона;
    • god - строка, элемент структуры t1, предназначенный для хранения года рождения.
  2. Открывается файл file1.dat в режиме добавления (ab).
  3. Выводится приглашение для ввода данных.
  4. В цикле do-while считываются данные: фамилия, номер телефона и год рождения.
  5. Данные записываются в файл с помощью функции fwrite.
  6. Выводится приглашение для подтверждения окончания ввода (zakonchit? y/n).
  7. Считывается ответ - символ, который сохраняется в переменной ch.
  8. Цикл продолжается, пока значение ch не станет равным 'y'.
  9. Файл закрывается функцией fclose.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы