使用c语言C语言栈的实现,错误提示“错误C4700使用了未初始化的局部变量“S””,代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 100
typedef int SElemType;

//顺序栈的存储结构
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;            //可用最大容量
}SqStack;

//初始化
void InitStack(SqStack *S)
{
    S->base = (SElemType*)malloc(MAXSIZE * sizeof(SElemType));
    if (!S->base)
        exit(1);
    S->top = S->base;
    S->stacksize = MAXSIZE;
}

//入栈
int Push(SqStack *S, SElemType e)
{
    if (S->top - S->base >= S->stacksize) return 0;    //栈满
    *S->top = e;
    S->top++;  ///*s->top++=e;
    return 1;
}

//出栈
int Pop(SqStack *S, SElemType &e)
{
    if (S->top == S->base) return 0;    //栈空

    S->top--;
    e = *S->top;
    return 1;
}
int StackEmpty(SqStack *S)
{
    SElemType e;
    if (S->top == S->base)  exit(1);

    S->top--;
    e = *S->top;
    return e;
}

//取栈顶元素
SElemType GetTop(SqStack *S, SElemType &e)
{
    if (S->top != S->base)     //非栈空时返回
        e = *(S->top - 1);
    return e;//++会改变指针自身值,而-1不会改变
}

//遍历输出栈
void printStack(SqStack *S)
{
    printf("栈底:");
    SElemType *p = S->base;
    while (p != S->top)
    {
        printf("%d ", *p);
        p++;
    }
    printf("\n");
}
int menu() {
    int a = 0;
    while (1) {
        printf("请选择一个功能号:\n");
        printf("\t\t1:请输入一个十进制数。\n");
        printf("\t\t2:请选择要转换的进制。\n");
        printf("\t\t3:转换后的结果显示。\n");
        printf("\t\t0:程序结束运行。\n");

        if (a == 0) {
            printf("退出程序。\n");
            exit(1);
        }
        if (a<1 || a>4) {
            printf("你选择功能号错误,请重新输入功能号。\n");
            continue;
        }
        else {
            return(a);
        }
    }
}


void main(int N, int r)
{
    printf("********************功能选择********************\n");
    SqStack *S;
    InitStack(S);
    int s;

    int x = N, y = r;
    while (1) {
        s = menu();
        if (s == 1) {
            printf("请输入一个十进制数:\n");    ///创建初始表
            scanf("输入的十进制数为:%d", x);
        }
        if (s == 2) {
            printf("\n请选择要转换的进制:\n");
            scanf("要转换成的进制为:%d", y);
            break;
        }
        if (s == 3) {
            int e;
            while (N != 0)
            {
                Push(S, N%r);
            }
            printf("\n十进制数%d所对应的%d进制数是:", x, y);
            while (!StackEmpty(S))
                Pop(S, e);
            printf("%d", e);
            printf("\n");
        }
        break;
        if (s == 0) {
            printf("\t\t0:程序结束运行。\n");
            exit(1);
        }
    }
}

 

SqStack *S =new SqStack; InitStack(S);

再main函数里,的确S没有初始化就用了

    SqStack *S;
    InitStack(S);

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y