数据结构C语言版,为什么这个程序运行起来乱七八糟 在该输入的时候为什么跳过?大家帮我运行分析一下下

#include<stdio.h>#include<malloc.h>#include<string.h>#defineCSFPL100#defineCCZL10type... #include<stdio.h>
#include<malloc.h>
#include<string.h>
#define CSFPL 100
#define CCZL 10
typedef struct{
char *base; /*定义栈*/
char *top;
int size;
}SXZ;

SXZ S;

SXZ InitStack(void)
{
S.base=(char*)malloc(CSFPL * sizeof(char)); /*初始化栈*/
S.top=S.base;
S.size=CSFPL;

}

SXZ Push(char e)
{ /*插入e为新的栈顶元素*/
if(S.top-S.base>=S.size)
{
S.base=(char*)realloc(S.base,(S.size+CCZL)*sizeof(char));
S.top=S.base+S.size;
S.size+=CCZL;

}
e=*(S.top-1);

}

SXZ Pop(char e)
{
if(S.top==S.base)
printf("错误"); /*删除栈顶并反回其值*/
e=*--S.top;

}

void main()
{
int a;
do
{

printf("\n\t\t\t欢迎使用本系统,栈的使用,请按要求操作\n\t\t\t1,初始化栈\n\t\t\t2,插入新的栈顶元素\n\t\t\t3,删除栈顶元素\n\t\t\t4,退出\n");
scanf("%d",&a);

switch(a)
{
case 1:{
InitStack();
}break;
case 2:{
char e;
printf("请输入要插入的字符元素\n");
scanf("%c",&e);
Push(e);
printf("插入成功\n");
}break;
case 3:{
int b;
Pop(b);
printf("栈顶已经删除,删除的元素为%c",b);
}break;
case 4:{
a=0;
printf("欢迎使用,现在要退出系统\n");
}break;
default: printf("输入错误,请重新输入\n");
}

}while(a);
}
展开
 我来答
鷹弈
2011-11-14 · TA获得超过5194个赞
知道大有可为答主
回答量:1257
采纳率:0%
帮助的人:744万
展开全部
//不明白你写的意思,给你改了一个,可以试试

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

#define CSFPL 100

typedef struct
{
char base; /*定义栈*/
char top;
char stack[CSFPL];//栈区
int size;
}SXZ;

SXZ S;

void InitStack(void)
{ /*初始化栈*/
S.top = S.base = 0;
S.size = CSFPL;
}

int Push(char e)
{ /*插入e为新的栈顶元素*/
if (S.top - S.base >= S.size)
{
printf("栈满!\n\n\n");
return 0;
}

S.stack[S.top++] = e;
return 1;
}

int Pop(char *e)
{
if (S.top == S.base)
{
printf("栈空!\n\n\n");
return 0;
}/*删除栈顶并反回其值*/

*e = S.stack[--S.top];
return 1;
}

void menu(void)
{
printf("\n\t\t\t欢迎使用本系统,栈的使用,请按要求操作\n\t\t\t1,初始化栈\n\t\t\t2,插入新的栈顶元素\n\t\t\t3,删除栈顶元素\n\t\t\t4,退出\n");
}

void main(void)
{
int a;

do
{

menu();
scanf("%d",&a);

switch(a)
{
case 1:{
system("cls");
InitStack();
printf("栈区已初始化!\n\n\n");
system("pause");
system("cls");
}break;
case 2:{
char e;
system("cls");//清屏
printf("请输入要插入的字符元素\n");
fflush(stdin);//清除缓冲区,即‘回车键’
scanf("%c",&e);
if (1 == Push(e))
{
printf("插入成功\n\n\n");
}
system("pause");//按任意键继续...
system("cls");
}break;
case 3:{
char b;
system("cls");
if (1 == Pop(&b))
{
printf("栈顶已经删除,删除的元素为%c\n\n\n",b);
}
system("pause");
system("cls");
}break;
case 4:{
system("cls");
a=0;
printf("欢迎使用,现在要退出系统\n");
}break;
default: printf("输入错误,请重新输入\n");
}

}while(a);
}
追问
太感谢了 能加个QQ以后多交流一下吗?  我才学的C
追答
fflush(stdin);就是用用清除缓冲区,在这里清除缓冲区的'回车键'

再说你写的确实有一些错误

1 2 1 5 9 0 6 8 0
锐道
2025-09-24 广告
URule Pro Java 规则引擎,一款给业务人员使用的可视化商业决策规则引擎系统,打开浏览器即可开始设计业务规则;URule Pro是一款自主研发纯Java规则引擎,亦是一款国产智能风控决策引擎,可以运行在Windows、Linux、... 点击进入详情页
本回答由锐道提供
hanzsim
2011-11-14 · TA获得超过1540个赞
知道小有建树答主
回答量:922
采纳率:0%
帮助的人:1160万
展开全部
LZ,你懂不懂C?
如果是对上面程序有意见,当我白说.
如果是想弄明白怎么回事,往下看.
你用的编译系统是什么?估计是TC吧,这程序是VC++的C版的.
SXZ InitStack(void)
{
S.base=(char*)malloc(CSFPL * sizeof(char)); /*初始化栈*/
S.top=S.base;
S.size=CSFPL;

}
这种malloc用法根本不对,在C中,struct中不会动态分配内存的.
代码别的问题根本没有.
追问
我是按数据结构这本书里面的伪代码写的   !里面是这样写的  我不知道自己有木有弄错!  不过书里面只是提供了初始化栈的算法  主函数什么都是我自己弄的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忘至白葬不情必0T
2011-11-13 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
看到有字符输入语句,基本上可以猜出楼主在输入字符时,每输入一个字符就按了一次回车。
要知道,回车实际上是输入了两个字符,而且后一个字符会留在输入缓冲区内,会下一个字符输入语句给读到。
正确的方法:一是一次性输入全部要输入的字符,再回车。二是每次输入字符前,调用清空输入缓冲区的语句。三是如果你每次输入字符后都要按回车,可以在输入字符前,调用一次getchar()
追问
虽然说楼下的程序都帮我弄好了 但是你才是说出了我错误的原因!谢谢啊!纠结着采纳谁呢?可惜你没有帮我编个,不然就给你了!我想想!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式