Не получается распечатать весь стек - C (СИ)
Формулировка задачи:
помогите найти ошибку в коде программы:
не получается распечатать стек. вобщем печатает только последний введенный элемент.
допустим я ввёл данные 2-х человек, а распечатывает только данные последнего введенного человека!
#include<stdio.h> #include<stdlib.h> struct el_st {char familia[15], gorod[20], ulica[20], imya[15], pol[10], nacionalnost[20], dom_adres[81], nom_tel[20], data_rozhd[20]; int nom_dom, nom_kvart, rost, ves, dom_adr; long index; struct el_st *sled; }; void vvod(struct el_st *us); main() {struct el_st *i; struct el_st *us; int k; i=NULL; us=malloc(sizeof(struct el_st)); clrscr(); printf("baza dannih chelovek.\n"); if(us!=NULL) do {vvod(us); printf("hotite vvesti dannie drugogo cheloveka? (1-da, 2-net) "); scanf("%d",&k); } while(k!=2); printf("\n Baza dannih:"); for(i=us;i!=NULL;i=i->sled) {printf("\nFamiliya:%s\nImya:%s\nPol:%s\nNocional'nost':%s\n",us->familia, i->imya,i->pol,i->nacionalnost); printf("Rost:%d\nves:%d\ndomashniy adres:index %ld g.%s ul.%s,%d kv.%d", i->rost,i->ves,i->index,i->gorod,i->ulica,i->nom_dom,i->nom_kvart); printf("\nData rozhdeniya:%s\nNomer telefona:%s\n",i->data_rozhd,i->nom_tel); } getch(); } void vvod(struct el_st *us) {printf(" Familiya:"); scanf("%s",us->familia); printf(" Imya:"); scanf("%s",us->imya); printf(" Pol:"); scanf("%s",us->pol); printf(" Nacional'nost':"); scanf("%s",us->nacionalnost); printf(" rost:"); scanf("%d",&us->rost); printf(" ves:"); scanf("%d",&us->ves); printf(" data rozhdeniya:"); scanf("%s",&us->data_rozhd); printf(" nomer telefona:"); scanf("%s",&us->nom_tel); printf(" index:"); scanf("%ld",&us->index); printf(" gorod:"); scanf("%s",&us->gorod); printf(" ulica:"); scanf("%s",&us->ulica); printf(" nomer doma:"); scanf("%d",&us->nom_dom); printf(" nomer rvartiri:"); scanf("%d",&us->nom_kvart); }
Решение задачи: «Не получается распечатать весь стек»
textual
Листинг программы
#include<stdio.h> #include<stdlib.h> #include <conio.h> using namespace std; struct el_st {char familia[15], gorod[20], ulica[20], imya[15], pol[10], nacionalnost[20], dom_adres[81], nom_tel[20], data_rozhd[20]; int nom_dom, nom_kvart, rost, ves, dom_adr; long index; struct el_st *sled; }; void vvod(struct el_st *us); main() { el_st *us; el_st *head=NULL; el_st *tail=NULL; int k; printf("baza dannih chelovek.\n"); do { us=(el_st*)malloc(sizeof(el_st));//выделяем память vvod(us);//вводим if(head==NULL && tail==NULL)//если список пуст, то us - голова head = us; else//иначе назначаем ссылку последнему элементу tail->sled = us; tail=us;//перемещаем хвост tail->sled = NULL; printf("hotite vvesti dannie drugogo cheloveka? (1-da, 2-net) "); scanf("%d",&k); }while(k!=2); printf("\n Baza dannih:"); for(us=head;us!=NULL;us=us->sled) { printf("\nFamiliya:%s\nImya:%s\nPol:%s\nNocional'nost':%s\n",us->familia, us->imya,us->pol,us->nacionalnost); printf("Rost:%d\nves:%d\ndomashniy adres:index %ld g.%s ul.%s,%d kv.%d", us->rost,us->ves,us->index,us->gorod,us->ulica,us->nom_dom,us->nom_kvart); printf("\nData rozhdeniya:%s\nNomer telefona:%s\n",us->data_rozhd,us->nom_tel); } getch(); } void vvod(struct el_st *us) {printf(" Familiya:"); scanf("%s",us->familia); printf(" Imya:"); scanf("%s",us->imya); printf(" Pol:"); scanf("%s",us->pol); printf(" Nacional'nost':"); scanf("%s",us->nacionalnost); printf(" rost:"); scanf("%d",&us->rost); printf(" ves:"); scanf("%d",&us->ves); printf(" data rozhdeniya:"); scanf("%s",&us->data_rozhd); printf(" nomer telefona:"); scanf("%s",&us->nom_tel); printf(" index:"); scanf("%ld",&us->index); printf(" gorod:"); scanf("%s",&us->gorod); printf(" ulica:"); scanf("%s",&us->ulica); printf(" nomer doma:"); scanf("%d",&us->nom_dom); printf(" nomer rvartiri:"); scanf("%d",&us->nom_kvart); }
Объяснение кода листинга программы
- В программе определен структурный тип данных
el_st
, который содержит информацию о человеке, включая поля: familia, gorod, ulica, imya, pol, nacionalnost, dom_adres, nom_tel, data_rozhd, nom_dom, nom_kvart, rost, ves, dom_adr, index. - В функции main() создается пустой список (в виде указателей на элементы структуры el_st), и затем в цикле do-while добавляются новые элементы, пока пользователь не введет цифру 2.
- Для каждого элемента списка в цикле for выводятся значения всех его полей.
- Функция vvod() используется для ввода данных о новом элементе списка. Она последовательно запрашивает и сохраняет значения всех полей структуры el_st в соответствующем элементе списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д