Несколько дней назад мы написали этот код в классе, и учитель попытался объяснить его, большинство из нас не поняли.Я почти полностью понимаю это сейчас, но почему второе время в основном не работает?Он должен вывести имя перед тем, как его вспомнить.
#include <stdio.h>
#include<stdlib.h>
typedef struct STK_S{
char name[100];
struct STK_S *next;
}STK;
int push(STK **ppS, STK *pD);
int pop(STK **ppS, STK *pD);
int main(){
STK *pS, d;
pS = NULL;
while (1){
printf_s("Ime ");
gets_s(d.name, 100);
if (d.name[0] == 0)
break;
push(&pS, &d);
}
while (pop(&pS, &d))
printf_s("\n%s", d.name);
return 0;
}
int push(STK **ppS, STK *pD){
STK *pt;
pt = (STK *)malloc(sizeof(STK));
if (pt == NULL)
return 0;
*pt = *pD;
pt->next = *ppS;
*ppS = pt;
return 1;
}
int pop(STK **ppS, STK *pD){
STK *pt;
if (*ppS == NULL){
printf("Empty stack.\n");
return NULL;
}
*pD = **ppS;
pt = *ppS;
*ppS = pt->next;
free(pt);
return 0;
}