Создать список, записать его в файл и вывести в правильной кодировке - C (СИ)

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

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

#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct sp
{
char *info;
struct sp *next;
}sp;
 
sp *sozdaniespiska();
void cleaning();
void vfail();
void izfaila();
 
int main(){
    int k;
    char a[100];
    sp *head;
    head=NULL;
    printf("Vvedite kolichestvo strok:\n");
    scanf("%d",&k);
    cleaning(stdin);
    printf("Vvedite stroki:\n");
    while(k--){
    scanf("%s",a);
    head=sozdaniespiska(a,head);
    }
    printf("Otvet\n");
    vfail(head);
    izfaila();
    return 0;
}
sp *sozdaniespiska(char a[], sp *head) {
    sp *buf = (sp*)malloc(sizeof(sp));
    buf->info = (char*) malloc(strlen(a) + 1);
    strcpy(buf->info, a);
    buf->next = NULL;
 
    if (head) {
        sp* cur = head;
        for (;cur->next; cur = cur->next){}
        cur->next = buf;
    }
    else {
        head = buf;
    }
    return head;
}
 
void cleaning(FILE* stream)
{
    int ch = getc(stream);
    while(ch != EOF && ch != '\n')
        ch = getc(stream);
}
 
void vfail(sp *head){
FILE *fp;
fp=fopen("test", "w+b");
while(head){
      fwrite(&head->info, sizeof(sp), 1, fp);
      head=head->next;
    }
    fclose(fp);
}
 
void izfaila(){
char *s;
FILE *fp;
fp=fopen("test", "r");
while(fread(&s, sizeof(s), 1, fp))
printf("%s\n", s);
fclose(fp);
}

Решение задачи: «Создать список, записать его в файл и вывести в правильной кодировке»

textual
Листинг программы
#include <stdio.h>
#include <malloc.h>
#include <string.h>
 
#define STRLEN 100
 
typedef struct sp
{
   char info[STRLEN];
   struct sp* next;
} sp;
 
sp* sozdaniespiska();
void cleaning();
void vfail();
void izfaila();
 
int main()
{
   int k;
   char a[STRLEN];
   sp* head;
   head = NULL;
   printf("Vvedite kolichestvo strok: ");
   scanf("%d", &k);
   fflush(stdin);
   printf("Vvedite stroki: ");
   while (k--)
   {
      scanf("%s", a);
      head = sozdaniespiska(a, head);
   }
   printf("Otvet\n");
   vfail(head);
   izfaila();
   return 0;
}
 
sp* sozdaniespiska(char a[], sp* head)
{
   sp* buf = (sp*)malloc(sizeof(sp));
 
   strncpy(buf->info, a, STRLEN);
   buf->next = NULL;
 
   if (head)
   {
      sp* cur = head;
      for (; cur->next; cur = cur->next) {}
      cur->next = buf;
   }
   else
   {
      head = buf;
   }
   return head;
}
 
void vfail(sp* head)
{
   FILE* fp = fopen("test", "wb");
 
   while (head)
   {
      fwrite(head->info, STRLEN, 1, fp);
      head = head->next;
   }
   fclose(fp);
}
 
void izfaila()
{
   char s[STRLEN];
   FILE* fp = fopen("test", "rb");
 
   while (fread(s, STRLEN, 1, fp))
   {
      printf("%s\n", s);
   }
   fclose(fp);
}

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

  1. #include - подключает файл стандартного ввода/вывода, необходимый для отправки сообщений в консоль
  2. #include - подключает файл malloc.h, который содержит функции для работы с динамической памятью
  3. #include - подключает файл string.h, который содержит функции для работы со строками
  4. #define STRLEN 100 - определяет размер строки в 100 символов
  5. typedef struct sp - объявляет структуру данных sp с полями info типа char и next типа указатель на sp
  6. *sp sozdaniespiska()** - объявляет функцию sozdaniespiska, которая создает новый элемент списка и добавляет его в конец списка
  7. void cleaning() - объявляет функцию cleaning, которая освобождает память, выделенную под динамические элементы списка
  8. *void vfail(sp head)** - объявляет функцию vfail, которая записывает список в файл в двоичном формате
  9. void izfaila() - объявляет функцию izfaila, которая читает список из файла и выводит его на экран
  10. int main() - объявляет функцию main, которая является точкой входа в программу
  11. scanf(%d, &k); - считывает количество строк для ввода из консоли
  12. fflush(stdin); - очищает буфер ввода, чтобы предотвратить утечку данных при считывании
  13. printf(Vvedite stroki:); - выводит приглашение для ввода строк
  14. while (k--) - выполняет цикл, пока количество строк больше нуля
  15. scanf(%s, a); - считывает строку из консоли
  16. head = sozdaniespiska(a, head); - добавляет новую строку в начало списка
  17. printf(Otvet\n); - выводит сообщение Otvet
  18. vfail(head); - записывает список в файл test в двоичном формате
  19. izfaila(); - читает список из файла test и выводит его на экран
  20. return 0; - завершает программу

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


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

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

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