Двусвязные списки структур, неправильно выводятся даты - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д