几天前我们在课堂上写了这段代码,老师试图解释,但我们大多数人都不明白。我现在几乎完全理解了,但是为什么第二个在主要的时候不起作用呢?它应该在弹出前输出一个名称。
#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
返回NULL
或0
,两者都转换为false
。所以循环不会一次运行。
关于c - 虽然循环不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50317373/