Двусвязные списки структур, неправильно выводятся даты - 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 для вывода информации о текущем элементе списка. Формат вывода включает два поля:
- Поле
%15s- выводит строку, выравнивая ее по левому краю и занимая максимум 15 символов. В данном случае это поле выводит значение поляname. - Поле
%4d- выводит int, выравнивая его по левому краю и занимая максимум 4 символа. В данном случае это поле выводит значение поляgod. Пример вывода:Имя 5Значение поляname-Имя, а значение поляgod- 5.