user-0 提问: C语言

回复:
user: user-0
content: 谢谢大家的指导 ，问题解决了！初学习C语言，多多指教!

user: user-1
content: 三楼好人一个，直接给出这么详细的代码了。 给颁个CSDN好人奖

user: user-2
content: # include <stdio.h> # include <malloc.h> # include <stdlib.h>  typedef struct Node  //链式栈 {         int data;         struct Node *pNext; }NODE, *PNODE;  void initStack(PNODE);               //初始化栈 void pushStack(PNODE, int);      //圧栈操作 bool popStack(PNODE, int*);     //出栈操作，出栈元素存放在d bool is_empty(PNODE);             //判断栈是否为空  int main() {         int N;   //要转化的十进制数         int k;   //转化成的进制数         int d;   //出栈元素存放在d         printf("请输入要转化的十进制数: ");         scanf("%d", &N);         printf("请输入要转的数制: ");         scanf("%d", &k);          NODE S;         initStack(&S);           while(N>0)         {                 pushStack(&S, N%k);                 N = N/k;         }         while(!is_empty(&S))         {                 popStack(&S, &d);                 printf("%d ", d);         }          return 0; } void initStack(PNODE S) {        // S = (PNODE)malloc(sizeof(NODE));//注释掉这句          if(NULL == S)         {                 printf("动态内存分配失败!\n");                 exit(-1);         }         S->pNext = NULL;  } void pushStack(PNODE S, int val) {         PNODE pNew = (PNODE)malloc(sizeof(NODE));         if(NULL == pNew)         {                 printf("动态内存分配失败!\n");                 exit(-1);         }         pNew->data = val;         pNew->pNext = S->pNext;         S->pNext = pNew; } bool is_empty(PNODE S) {         if(NULL == S->pNext )                 return true;         else                 return false; }  bool popStack(PNODE S, int *pVal) {         if( is_empty(S) )                 return false;         else         {                 PNODE p = S->pNext;                 *pVal = p->data;                 S->pNext = p->pNext;                 free(p);                 return true;         } }

user: user-3
content: 主要是你需要知道为什么要这样改，再讨论吧~~~

user: user-3
content: # include <stdio.h> # include <malloc.h> # include <stdlib.h>   typedef struct Node  //链式栈 {         int data;         struct Node *pNext; }NODE, *PNODE;   void initStack(PNODE);               //初始化栈 void pushStack(PNODE, int);      //圧栈操作 bool popStack(PNODE, int*);     //出栈操作，出栈元素存放在d bool is_empty(PNODE);             //判断栈是否为空   int main() {         int N;   //要转化的十进制数         int k;   //转化成的进制数         int d;   //出栈元素存放在d         printf("请输入要转化的十进制数: ");         scanf("%d", &N);         printf("请输入要转的数制: ");         scanf("%d", &k);           NODE S;    //这儿是一个结构体变量（不是指针哦），在initStack里你用的malloc哦。所以，这儿应该用指针。        //PNODE S = NULL；试试这样会不会运行呢         initStack(&S);             while(N>0)         {                 pushStack(S, N%k);                 N = N/k;         }         while(！is_empty(S))         {                 popStack(S, &d);                 printf("%d ", d);         }           return 0; } void initStack(PNODE *S)    //这儿 {         *S = (PNODE)malloc(sizeof(NODE));         if(NULL == *S)         {                 printf("动态内存分配失败!\n");                 exit(-1);         }         *S->pNext = NULL;   } void pushStack(PNODE S, int val) {         PNODE pNew = (PNODE)malloc(sizeof(NODE));         if(NULL == pNew)         {                 printf("动态内存分配失败!\n");                 exit(-1);         }         pNew->data = val;         pNew->pNext = S->pNext;         S->pNext = pNew; } bool is_empty(PNODE S) {         if(NULL == S->pNext)                 return true;         else                 return false; }   bool popStack(PNODE S, int *pVal) {         if( is_empty(S) )                 return false;         else         {                 PNODE p = S->pNext;                 *pVal = p->data;                 S->pNext = p->pNext;                 free(p);                 return true;         } } 抱歉还需要改。我是欠考虑~~~

user: user-3
content: # include <stdio.h> # include <malloc.h> # include <stdlib.h>  typedef struct Node  //链式栈 {         int data;         struct Node *pNext; }NODE, *PNODE;  void initStack(PNODE);               //初始化栈 void pushStack(PNODE, int);      //圧栈操作 bool popStack(PNODE, int*);     //出栈操作，出栈元素存放在d bool is_empty(PNODE);             //判断栈是否为空  int main() {         int N;   //要转化的十进制数         int k;   //转化成的进制数         int d;   //出栈元素存放在d         printf("请输入要转化的十进制数: ");         scanf("%d", &N);         printf("请输入要转的数制: ");         scanf("%d", &k);          NODE S;    //这儿是一个结构体变量（不是指针哦），在initStack里你用的malloc哦。所以，这儿应该用指针。        //PNODE S = NULL；试试这样会不会运行呢         initStack(&S);           while(N>0)         {                 pushStack(&S, N%k);                 N = N/k;         }         while(！is_empty(&S))         {                 popStack(&S, &d);                 printf("%d ", d);         }          return 0; } void initStack(PNODE S) {         S = (PNODE)malloc(sizeof(NODE));         if(NULL == S)         {                 printf("动态内存分配失败!\n");                 exit(-1);         }         S->pNext = NULL;  } void pushStack(PNODE S, int val) {         PNODE pNew = (PNODE)malloc(sizeof(NODE));         if(NULL == pNew)         {                 printf("动态内存分配失败!\n");                 exit(-1);         }         pNew->data = val;         pNew->pNext = S->pNext;         S->pNext = pNew; } bool is_empty(PNODE S) {         if(NULL == S->pNext)                 return true;         else                 return false; }  bool popStack(PNODE S, int *pVal) {         if( is_empty(S) )                 return false;         else         {                 PNODE p = S->pNext;                 *pVal = p->data;                 S->pNext = p->pNext;                 free(p);                 return true;         } }   入栈，出栈和判断栈是否为空都没有问题，问题应该出在initstack上。 如果按照我说的改还有问题，那再联系我，我们再沟通分析一下。

user: user-4
content: 调试吧！要学会解决问题，而不是遇到问题就上论坛问！