Хотя цикл не работает? - PullRequest
0 голосов
/ 13 мая 2018

Несколько дней назад мы написали этот код в классе, и учитель попытался объяснить его, большинство из нас не поняли.Я почти полностью понимаю это сейчас, но почему второе время в основном не работает?Он должен вывести имя перед тем, как его вспомнить.

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

1 Ответ

0 голосов
/ 13 мая 2018

pop возвращает NULL или 0, которые оба преобразуются в false. Таким образом, цикл выполняется не один раз.

...