При добавлении в существующий список, новые записи добавлять в начало - 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);
Объяснение кода листинга программы
- Объявлены переменные:
- ch - символ, используется для проверки условия в цикле do-while;
- tf - указатель на файл, по умолчанию имеет значение NULL;
- t1 - структура, используемая для хранения данных;
- fam - строка, элемент структуры t1, предназначенный для хранения фамилии;
- tel - float, элемент структуры t1, предназначенный для хранения номера телефона;
- god - строка, элемент структуры t1, предназначенный для хранения года рождения.
- Открывается файл
file1.dat
в режиме добавления (ab
). - Выводится приглашение для ввода данных.
- В цикле do-while считываются данные: фамилия, номер телефона и год рождения.
- Данные записываются в файл с помощью функции fwrite.
- Выводится приглашение для подтверждения окончания ввода (
zakonchit? y/n
). - Считывается ответ - символ, который сохраняется в переменной ch.
- Цикл продолжается, пока значение ch не станет равным 'y'.
- Файл закрывается функцией fclose.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д