Не получается распечатать весь стек - C (СИ)

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

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

помогите найти ошибку в коде программы:
#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);
 }
не получается распечатать стек. вобщем печатает только последний введенный элемент. допустим я ввёл данные 2-х человек, а распечатывает только данные последнего введенного человека!

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

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);
 }

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

  1. В программе определен структурный тип данных el_st, который содержит информацию о человеке, включая поля: familia, gorod, ulica, imya, pol, nacionalnost, dom_adres, nom_tel, data_rozhd, nom_dom, nom_kvart, rost, ves, dom_adr, index.
  2. В функции main() создается пустой список (в виде указателей на элементы структуры el_st), и затем в цикле do-while добавляются новые элементы, пока пользователь не введет цифру 2.
  3. Для каждого элемента списка в цикле for выводятся значения всех его полей.
  4. Функция vvod() используется для ввода данных о новом элементе списка. Она последовательно запрашивает и сохраняет значения всех полей структуры el_st в соответствующем элементе списка.

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


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

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

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