主题:[菜鸟求助]谁来帮我看看这个程序?
changhe713
[专家分:0] 发布于 2006-11-16 18:13:00
程序功能是利用堆栈实现字符的顺序输入逆序输出,堆栈用数组实现。
#include "stdio.h"
typedef struct stack
{
char elem[100];
int top;
}sqstack;
void initstack
{
sqstack *p=(sqstack*)malloc(sizeof(sqstack));
p->top=-1;
return p;
}
clearstack(sqstack *p)
{
free(p);
}
push(sqstack *p,char a)
{
if(s->top==99) return 0;
p->top++;
p->elem[s->top]=a;
return 1;
}
pop(sqstack *p)
{
char a;
a=p->elem[p->top];
p->top--;
return a;
}
main()
{
char a;sqstack *p;
p=initstack;
printf("输入一串字符,反向输出,回车结束");
a=getch();i=0;
while(a!='/n')
{
push(p,a);
a=getch();
i++;
}
for(i;i=1;i--)
{
printf("%c",pop(p));
}
clearstack(p);
}
回复列表 (共9个回复)
沙发
qiezi7777 [专家分:270] 发布于 2006-11-16 20:33:00
我也是一只菜鸟,我只能找这么几处不对的地方:void initstack
{
sqstack *p=(sqstack*)malloc(sizeof(sqstack));
p->top=-1;
return p;
}在个函数中前面是void类型的了后面又有一个反回值,不对。
pop(sqstack *p)应定义为int 类型的。
pop(sqstack *p)应定义为char类型的。
这两个后都 有一人返回值,应定义一下。
while(a!='/n')我觉得这个的结束条件是a!='\0',
p=initstack;我觉得这个地方也不对。
板凳
orangelegend [专家分:860] 发布于 2006-11-17 00:12:00
要看课本吧,
错误多多啊
3 楼
changhe713 [专家分:0] 发布于 2006-11-17 20:08:00
还有哪些错误呢?烦师兄师姐一样指正啊,唉
[em10]
4 楼
louja [专家分:280] 发布于 2006-11-17 20:35:00
错误太多,我改下吧,以后多多看书
#include "stdio.h"
#define N 100;
typedef struct stack
{
char elem[N];
int top;
}sqstack;
sqstack * initstack()
{
sqstack *p=(sqstack*)malloc(sizeof(sqstack));
p->top=-1;
return p;
}
clearstack(sqstack *p)
{
free(p);
}
push(sqstack *p,char a)
{
if(s->top==99)
{
printf("ERROR!");return ;
}
else
{
p->top++;
p->elem[p->top]=a;
}
}
pop(sqstack *p,char *x)
{
if(p->top==-1)
{
printf("ERROR!");return ;
}
else
{
*xa=p->elem[p->top];
p->top--;
}
}
main()
{
char a;sqstack *p;
char x;
p=initstack;
printf("输入一串字符,反向输出,回车结束");
a=getch();
int i=0,j;
while(a!='/n'&&i >N)
{
push(p,a);
a=getch();
i++;
}
for(j=0;j<i;j++)
{
pop(p,&x)
printf("%c",x);
}
clearstack(p);
}
5 楼
changhe713 [专家分:0] 发布于 2006-11-18 10:36:00
我怎么觉得你的程序就有好多错?
改了一下,可是还有错:
#include<conio.h>
#include "stdio.h"
#define N 100
typedef struct
{
char elem[N];
int top;
}sqstack;
sqstack * initstack(void)
{
sqstack *p=(sqstack*)malloc(sizeof(sqstack));
p->top=-1;
return p;
}
clearstack(sqstack *p)
{
free(p);
}
push(sqstack *p,char a)
{
if(p->top==99)
{
printf("ERROR!");return 0;
}
else
{
p->top++;
p->elem[p->top]=a;
return 1;
}
}
pop(sqstack *p,char *x)
{
if(p->top==-1)
{
printf("ERROR!");return ;
}
else
{
*x=p->elem[p->top];
p->top--;
}
}
main()
{
char a;sqstack *p;int j=0,i=0;
char x;
p=initstack();
printf("输入一串字符,反向输出,回车结束");
a=getchar();
while(a!='\n'&&i<N)
{
push(p,a);
a=getchar();
i++;
}
for(j=0;j<i-1;j++)
{
pop(p,&x);
printf("%c",x);
}
clearstack(p);
}
6 楼
luoluowuchen [专家分:30] 发布于 2006-11-18 18:13:00
调试了一下,虽然没有错误,但是没有结果
#include<conio.h>
#include "stdio.h"
#include<malloc.h>
#define N 100
typedef struct
{
char elem[N];
int top;
}sqstack;
sqstack * initstack(void)
{
sqstack *p=(sqstack*)malloc(sizeof(sqstack));
p->top=-1;
return p;
}
void clearstack(sqstack *p)
{
free(p);
}
push(sqstack *p,char a)
{
if(p->top==99)
{
printf("ERROR!");return 0;
}
else
{
p->top++;
p->elem[p->top]=a;
return 1;
}
}
void pop(sqstack *p,char *x)
{
if(p->top==-1)
{
printf("ERROR!");return ;
}
else
{
*x=p->elem[p->top];
p->top--;
}
}
void main()
{
char a;sqstack *p;int j=0,i=0;
char x;
p=initstack();
printf("输入一串字符,反向输出,回车结束");
a=getchar();
while(a!='\n'&&i<N)
{
push(p,a);
a=getchar();
i++;
}
for(j=0;j<i-1;j++)
{
pop(p,&x);
printf("%c",x);
}
clearstack(p);
}
7 楼
freeeerf [专家分:5440] 发布于 2006-11-18 18:22:00
我写一个试试.
8 楼
freeeerf [专家分:5440] 发布于 2006-11-18 18:47:00
#include<conio.h>
#include<stdio.h>
#include<string.h>
#define N 100
typedef struct
{
char elem[N];
int top;
}sqstack;
sqstack * initstack(void)
{
sqstack *p=(sqstack *)malloc(sizeof(sqstack));
p->top=0;
return p;
}
void clearstack(sqstack *p)
{
free(p);
}
int push(sqstack *p,char a)
{
if(p->top==100)
{
printf("ERROR!");
return 0;
}
else
{
p->elem[p->top++]=a;
return 1;
}
}
void pop(sqstack *p,char *x)
{
if(p->top==0)
{
printf("ERROR!");
return ;
}
else
*x=p->elem[--p->top];
}
int main()
{
char a[N]={0};
char x;
sqstack *p;
int i,j,len;
p=initstack();
printf("输入一串字符,反向输出,回车结束\n");
gets(a); //输入一个字符串或连续输入字符不要用getchar() 这家伙读取一个字符就要有回车在后面!用getche();一个一个读取
//或用gets();一次性地读取.用getche();读时,输入后就不能修改了,用gets()输入后想修改还可以修改.
//该死的用getche()读到的回车是'\r'.光标回到当前行的首位置,所以这里只能用gets()了.
len=strlen(a);
for(i=0; i<len; ++i)
push(p,a[i]);
for(j=0;j<i;j++) //i 压入的字符的个数,所以用j<i而不是j<i-1.设什么j 啊,用i已经可以搞定了.
{
pop(p,&x);
printf("%c",x);
}
clearstack(p);
system("pause");
return 0;
}
好好编程试试getchar();的功能吧.它是经常犯的错误之一.
9 楼
tianlu [专家分:40] 发布于 2006-11-21 19:20:00
楼上真厉害,佩服啊,我也是菜鸟,也不会用getchar()函数,几乎每次都有错。。。所以不到万不得已坚决不用,只用gets(),gets()真是个好东西啊,不过和scanf()混合起来用并且scanf()在前面的话,就要加一个fflush(stdin)语句。。。
呵呵。。。
我来回复