关于C语言的一些小问题

//顺序栈
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Status int
#define SElemType int
#define Max 100
typedef struct{
    SElemType *base;
    SElemType *top;
    int SizeMax;
}Sq;
 Status news(Sq &S){
    S.base=new SElemType[Max];
    if(S.base!=0) return 0;
    S.top=S.base;
    S.SizeMax=Max;
    printf("初始化成功!");
    return 1;
}
 Status in(Sq &S,SElemType e){
    if(S.top-S.base==S.SizeMax)
       return 0;
    *(S.top++)=e;
    //*S.top++;
    return 1;
}
Status out(Sq &S,SElemType q){
    if(S.top==S.base)
       return 0;
    q=*S.top;
    S.top--;
    return 1;
}
Status quzhi(Sq S){
    if(S.top!=S.base)
       return *(S.top-1);
}
Status Push(Sq &S){
   int a,i,k;
   printf("进入入栈操作");
   printf("请输入想入栈的个数:");
   scanf("%d",&a);
   for(i=0;i<a;i++)
   {
       printf("输入的是第%d个数",i+1);
       scanf("%d",&k);
       in(S,k);
   }
   printf("入栈成功");
}
Status GoOut(Sq &S){
     int a,i,k;
      printf("进入出栈操作");
      printf("请输入想出栈的个数:");
      scanf("%d",&a);
      for(i=0;i<a;i++)
         {
           printf("输入的是第%d个数",i+1);
           scanf("%d",&k);
           out(S,k);
         }
      printf("出栈成功");
}





int main(){
   Sq S;SElemType e;int q;
   news(S);   
   while(1)
   {
   printf("欢迎进入顺序栈的实践界面");
   printf("1.入栈");
   printf("2.出栈");
   printf("3.出栈顶元素");
   printf("请输入数字:");
   scanf("%d",&q);
   switch(q)
      {
        case 1:
          Push(S);break;
        case 2:
          GoOut(S);break;
        case 3:
          quzhi(S);break;
      }
   }

 }

这段程序的初始化一直就运行不了,不知道这是为什么,求解

// Q956803.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


//顺序栈
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Status int
#define SElemType int
#define Max 100
typedef struct{
    SElemType *base;
    SElemType *top;
    int SizeMax;
}Sq;
 Status news(Sq &S){
    S.base=new SElemType[Max];
    if(!S.base) return 0; //修改
    S.top=S.base;
    S.SizeMax=Max;
    printf("初始化成功!");
    return 1;
}
 Status in(Sq &S,SElemType e){
    if(S.top-S.base==S.SizeMax) 
       return 0;
    *(S.top++)=e;
    //*S.top++;
    return 1;
}
Status out(Sq &S,SElemType& q){ //修改
    if(S.top==S.base)
       return 0;
    q=*(S.top-1);
    S.top--;
    return 1;
}
SElemType quzhi(Sq S){ //修改
    if(S.top!=S.base)
       return *(S.top-1);
}
Status Push(Sq &S){
   int a,i,k;
   printf("进入入栈操作");
   printf("请输入想入栈的个数:");
   scanf("%d",&a);
   for(i=0;i<a;i++)
   {
       printf("输入的是第%d个数",i+1);
       scanf("%d",&k);
       in(S,k);
   }
   printf("入栈成功");
   return 1;
}
Status GoOut(Sq &S){
     int a,i,k;
      printf("进入出栈操作");
      printf("请输入想出栈的个数:");
      scanf("%d",&a);
      for(i=0;i<a;i++)
         {
           out(S,k); //修改
           printf("%d ", k);
         }
      printf("出栈成功");
      return 1;
}


int main(){
   Sq S;SElemType e;int q;
   news(S);   
   while(1)
   {
   printf("欢迎进入顺序栈的实践界面");
   printf("1.入栈");
   printf("2.出栈");
   printf("3.Peek顶元素");
   printf("请输入数字:");
   scanf("%d",&q);
   switch(q)
      {
        case 1:
          Push(S);break;
        case 2:
          GoOut(S);break;
        case 3:
          printf("%d\n", quzhi(S));break;
      }
   }

 }

把 news函数里的 if(S.base!=0) return 0;改为if(S.base==0)return 0;
逻辑问题,你指针有值,下面不执行

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^