Добавить элемент в список - C (СИ)
Формулировка задачи:
У меня есть программа, двунаправленный список
Она считывает из файла base, вот такую информацию:
далее выводит на экран. После я хочу добавить ещё один элемент к этому списку, добавляю, программа выводит его, но в файл он не записывается. Не получается реализовать запись. Подскажите пожалуйста. Почему-то не работает
Пытаюсь реализизовать через fwrite
Код программы:
Имя Фамилия номер оценка
Имя Фамилия номер оценка
и т.д.
#include <stdio.h> #include <Strings.h> #include <stdlib.h> struct list { int id; char data[100]; int mark; struct list *next; struct list *last; }; void output(struct list *head) { while(head) { printf("\n%d %s %d", head->id, head->data, head->mark); head=head->next; } } void add(struct list *head) { FILE *f=fopen("base.txt","a+"); char name[50]; char surname[25]; printf("\nPlease type name, surname, id and mark\n"); scanf("%s%s%d%d", name, surname, &head->id, &head->mark); strcat(name, " "); strcat(name, surname); strcpy(head->data, name); //fwrite((head->data, head->id, head->mark), 1, strlen(head->data), f); // вот тут пробую, но не получается. В этой строчки полно ошибок, но я попытался передать суть, того, что я хочу сделать. Помогите исправить. Запись в файл должна производиться с новой строчки каждый раз. } int main() { struct list *item; struct list *n; struct list *l=NULL; FILE *f=fopen("base.txt","r+"); char name[100]; char surname[50]; int x; while (!feof(f)) { if(l==0) { item=(struct list*)malloc(sizeof(struct list)); if(item==0) { printf("\nError"); return 0; } item->last=0; n=item; } else { item->next=(struct list*)malloc(sizeof(struct list)); item=item->next; if(item==0) { printf("\nError"); return 0; } item->last=l; } fscanf(f,"%s%s%d%d", name, surname,&item->id,&item->mark); strcat(name," "); strcat(name,surname); strcpy(item->data,name); item->next=0; l=item; } do { output(n); printf("\n\n\*------Menu:------*"); printf("\n1. Add person\n"); scanf("%d", &x); switch(x) { case 1: l->next=(struct list*)malloc(sizeof(struct list)); if (l->next==0) return 0; l->next->last=l; l=l->next; add(l); break; } } while (x!=4); while (n) { l=n; n=n->next; free(l); } return 0; }
Решение задачи: «Добавить элемент в список»
textual
Листинг программы
#include <stdio.h> #include <Strings.h> #include <stdlib.h> struct list { int id; char data[100]; int mark; struct list *next; struct list *last; }; void output(struct list *head) { while(head) { printf("\n%d %s %d", head->id, head->data, head->mark); head=head->next; } } void add(struct list *head) { FILE *f=fopen("base.txt","a+"); char name[50]; char surname[25]; printf("\nPlease type name, surname, id and mark\n"); scanf("%s%s%d%d", name, surname, &head->id, &head->mark); strcat(name, " "); strcat(name, surname); strcpy(head->data, name); fprintf(f,"\n%s %s %d %d", name, surname, head->id, head->mark); fclose(f); //fwrite((head->data, head->id, head->mark), 1, strlen(head->data), f); // вот тут пробую, но не получается. В этой строчки полно ошибок, но я попытался передать суть, того, что я хочу сделать. Помогите исправить. Запись в файл должна производиться с новой строчки каждый раз. } int main() { struct list *item; struct list *n; struct list *l=NULL; FILE *f=fopen("base.txt","r+"); char name[100]; char surname[50]; int x; while (!feof(f)) { if(l==0) { item=(struct list*)malloc(sizeof(struct list)); if(item==0) { printf("\nError"); return 0; } item->last=0; n=item; } else { item->next=(struct list*)malloc(sizeof(struct list)); item=item->next; if(item==0) { printf("\nError"); return 0; } item->last=l; } fscanf(f,"%s%s%d%d", name, surname,&item->id,&item->mark); strcat(name," "); strcat(name,surname); strcpy(item->data,name); item->next=0; l=item; } do { output(n); printf("\n\n\*------Menu:------*"); printf("\n1. Add person\n"); scanf("%d", &x); switch(x) { case 1: l->next=(struct list*)malloc(sizeof(struct list)); if (l->next==0) return 0; l->next->last=l; l=l->next; add(l); break; } } while (x!=4); while (n) { l=n; n=n->next; free(l); } fclose(f); return 0; }
Объяснение кода листинга программы
- В начале кода определена структура
list
для представления элементов списка. - Функция
output
используется для вывода содержимого списка. - Функция
add
используется для добавления нового элемента в список и записи этого элемента в файлbase.txt
. - В функции
main
создается пустой список и открывается файлbase.txt
для чтения и записи. - Затем происходит чтение данных из файла и добавление этих данных в список до тех пор, пока не будет достигнут конец файла.
- После этого пользователю предлагается выбрать действие из меню, где вариант
1
используется для добавления нового элемента в список. - В случае выбора варианта
1
, создается новый элемент, который добавляется в конец списка и затем добавляется в файлbase.txt
. - После выхода из цикла do-while, список освобождается и файл закрывается.
- Возвращаемое значение функции
main
равно 0, что указывает на успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д