几天前我们在课堂上写了这段代码,老师试图解释,但我们大多数人都不明白。我现在几乎完全理解了,但是为什么第二个在主要的时候不起作用呢?它应该在弹出前输出一个名称。

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

最佳答案

pop返回NULL0,两者都转换为false。所以循环不会一次运行。

关于c - 虽然循环不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50317373/

10-10 19:59