顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行。预计主函数存在问题。

#include
#include
#define MAXSIZE 100 //顺序栈的存储空间的初始分配量
#define SElemType int
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;

//栈的初始化
void InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(sizeof(SqStack)*MAXSIZE); //分配最大存储内存
if(!S->base)
{
printf("初始化失败!\n");
exit(0);
}
else
{
S->top=S->base; //top初始值为base,栈空
S->stacksize=MAXSIZE; //stacksize置为栈的最大存储容量
printf("初始化成功!\n");
}
return 0;

}
//入栈
void Push(SqStack *S)
{
SElemType e;
printf("请输入入栈元素: ");

if(S->top - S->base==S->stacksize)
    printf("栈满\n");
else
{
    scanf("%d\n",&e);
    *S->top++=e;    //把S栈顶指针指向E,运算完成后栈空间才自增1
    printf("入栈成功,栈顶元素为:%d\n\n",e);
}

}

//出栈
void Pop(SqStack S,SElemType *e)
{
if(S->top-S->base==S->stacksize)
printf("\n栈满\n\n");
else
{
e=
--S->top; //优先级 '.' > "--" = '*'
if(S->base==S->top)
printf("栈空\n\n");
else
printf("出栈成功,栈顶元素为:%d\n\n",*S->top );
}
return 0;
}

//取栈顶元素,不修改栈顶指针
void GetTop(SqStack *S,SElemType *e)
{
if(*S->top!=*S->base) //栈非空
printf("%d\n\n",*S->top);
else
printf("sorry! zhankong!\n\n");
return 0;
}
int main()
{
int x;
SElemType e;
SqStack S;
InitStack(&S);
for(;;)
{
printf("主菜单\n");
printf("1、入栈\n2、出栈\n3、输出栈顶元素\n4、退出\n");
printf("请选择:");
scanf("%d",&x);
switch(x)
{
case 1:
Push(&S);
break;
case 2:
Pop(&S,&e);
break;
case 3:
GetTop(&S,&e);
break;
case 4:
exit(0);
}
}
return 0;
}

1个回答

scanf里多了\n

 #include<iostream>
#include<stack>
using namespace std;
#define MAXSIZE 100 //顺序栈的存储空间的初始分配量
#define SElemType int
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
} SqStack;
//栈的初始化
void InitStack(SqStack *S)
{
    S->base=(SElemType *)malloc(sizeof(SqStack)*MAXSIZE); //分配最大存储内存
    if(!S->base)
    {
        printf("初始化失败!\n");
        exit(0);
    }
    else
    {
        S->top=S->base; //top初始值为base,栈空
        S->stacksize=MAXSIZE; //stacksize置为栈的最大存储容量
        printf("初始化成功!\n");
    }
    return;
}
//入栈
void Push(SqStack *S)
{
    SElemType e;
    printf("请输入入栈元素: ");
    if(S->top - S->base==S->stacksize)
        printf("栈满\n");
    else
    {
        scanf("%d",&e);
        *S->top++=e;    //把S栈顶指针指向E,运算完成后栈空间才自增1
        printf("入栈成功,栈顶元素为:%d\n\n",e);
    }
}
//出栈
void Pop(SqStack *S,SElemType *e)
{
    if(S->top-S->base==S->stacksize)
        printf("\n栈满\n\n");
    else
    {
        e=--S->top; //优先级 '.' > "--" = '*'
        if(S->base==S->top)
            printf("栈空\n\n");
        else
            printf("出栈成功,栈顶元素为:%d\n\n",*S->top );
    }
    return;
}
//取栈顶元素,不修改栈顶指针
void GetTop(SqStack *S,SElemType *e)
{
    if(*S->top!=*S->base) //栈非空
        printf("%d\n\n",*S->top);
    else
        printf("sorry! zhankong!\n\n");
    return;
}
int main()
{
    int x;
    SElemType e;
    SqStack S;
    InitStack(&S);
    for(;;)
    {
        printf("主菜单\n");
        printf("1、入栈\n2、出栈\n3、输出栈顶元素\n4、退出\n");
        printf("请选择:");
        scanf("%d",&x);
        switch(x)
        {
        case 1:
            Push(&S);
            break;
        case 2:
            Pop(&S,&e);
            break;
        case 3:
            GetTop(&S,&e);
            break;
        case 4:
            exit(0);
        }
    }
    return 0;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

1
输入www.baidu.com回车之后发生了什么?
7
为啥c语言程序运行数据输入后回车无效
1
anjularjs 获取到整个页面中的回车响应事件
1
jquery textarea 文本域值的问题
5
请问 为什么这个代码没有错误,但是一运行输入后一敲回车就停止运行了呢?
3
C++ getLine()函数读取字符串时,总是先读取一个回车符,怎么解决
3
java中如何判断输入的是回车
2
Android如何控制第三方的输入法 使其回车键变为 完成
1
npm install tomdjs -g后,在命令行输入tomd回车,说查无此命令?
1
批处理修改文件夹名称,需要结束和开启Windows Update服务
3
输入一串字符,回车结束
1
Java如何使输入空格和回车前台不显示
4
C语言程序,vs2012运行,照着书上打的,运行后输入回车就是在不停的换行,不执行。求大神看看
4
<c:forEach> 中的input输入框 如何在输入结束后按回车自动跳转到下一个input输入框
2
android 中的回车键的监听
3
C语言。从键盘上输入一些整数,求所有正数之和,当输入0或负数时,程序结束。
2
一个简单的四则计算程序,怎么在用户未完整输入算式就按回车的时候在屏幕上显示错误信息?
1
文本IO问题,文本中最后少输入一个回车,则c++就少输入一个txt最后的值
1
求大神帮忙在我的代码(栈,C/C++,简单的四则运算)上修改一下,代码和要求都在楼下!
0
这是一段C语言栈的操作的代码。但是运行出错帮忙看一下