Двусвязные списки структур, неправильно выводятся даты - C (СИ)

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

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

Стандартное задание, с нестандартной проблемой. Создать двусвязный список, вывести его на экран. Структура содержит фамилию и год рождения. ПРОБЛЕМА: Вместо даты на экране 4 цифры каких то. Не понимаю, откуда они берутся и почему, делаю как все, а выходит так странно. Может дело в ДОСБоксе? у меня 0.73 версия уже настроенная под Си... А может я всетаки где-то накосячила? Вот код:
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <string.h>
struct spis
 {char name [15];
 int god [4];
  struct spis *v1;//указатель на предыдущую структуру
  struct spis *v2;//указатель на последующую структуру
 };
 void create (void);//создание списка
 void scan (struct spis *);
 struct spis * head, * tail;//указатели на начало и конец списка
 main()
 {
  char k;
  while(1)
  {
    clrscr ();
   puts ("1 - создание списка структур");
   puts ("2 - просмотр списка");
   puts ("0 - выход");
   k = getch ();
   switch (k)
   {
    case '1':create (); break;
    case '2':scan (head); break;
    case '0': {free (head); return 0;}
    default: puts ("неверный режим");
   }
  }
 }
 void create (void)
 {
  char key;
  struct spis *p, *pred;
  pred=NULL;
  do
    {
     p=(struct spis *) malloc(sizeof(struct spis));
     printf("Фамилия: ");
     gets (p->name);
     printf("Год рождения: ");
     scanf ("%d",p->god);
     p->v1=pred;
     if (pred!=NULL)//если спиоск не пуст
       pred->v2=p;  //добавляем элемент к списку
     else   //если список пуст
       head=p; //создаем первый элемент в списке
     pred=p;
     printf("\n Закончить ввод данных? y/n \n");
     key=getch();
    }
  while (key !='y');
  tail=p;
  tail->v2=NULL;
 }
void scan (struct spis *p) 
{int i=0;
 printf ("\n N   Фамилия       Год  ");
 printf ("\n п/п               рождения");
 if (p==head)
  {
   while (p!=NULL)
    {i++;
     printf ("\n %d",i);
     printf(" %15s %4d", p->name, p->god);
     p=p->v2;
    }
   }
  else
   if (p==tail)
     while (p!=NULL)
      {
    i++;
    printf ("\n %d",i);
    printf("\n %15s  %4d", p->name, p->god);
    p=p->v1;
       }
   else
    printf("\n Неверный адрес ");
 getch();
}

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

textual
Листинг программы
printf(" %15s %4d", p->name, p->god);

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

Код выводит информацию о элементах двусвязного списка структур. Структура данных, вероятно, содержит поля name (тип данных - строка) и god (тип данных - int). Код использует функцию printf для вывода информации о текущем элементе списка. Формат вывода включает два поля:

  1. Поле %15s - выводит строку, выравнивая ее по левому краю и занимая максимум 15 символов. В данном случае это поле выводит значение поля name.
  2. Поле %4d - выводит int, выравнивая его по левому краю и занимая максимум 4 символа. В данном случае это поле выводит значение поля god. Пример вывода: Имя 5 Значение поля name - Имя, а значение поля god - 5.

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


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

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

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