回 帖 发 新 帖 刷新版面

主题:[菜鸟求助]谁来帮我看看这个程序?

程序功能是利用堆栈实现字符的顺序输入逆序输出,堆栈用数组实现。
#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个回复)

沙发

我也是一只菜鸟,我只能找这么几处不对的地方: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;我觉得这个地方也不对。

板凳

要看课本吧,
错误多多啊

3 楼

还有哪些错误呢?烦师兄师姐一样指正啊,唉
[em10]

4 楼

错误太多,我改下吧,以后多多看书
#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 楼

我怎么觉得你的程序就有好多错?
改了一下,可是还有错:
#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 楼

调试了一下,虽然没有错误,但是没有结果
#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 楼

我写一个试试.

8 楼

#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 楼

楼上真厉害,佩服啊,我也是菜鸟,也不会用getchar()函数,几乎每次都有错。。。所以不到万不得已坚决不用,只用gets(),gets()真是个好东西啊,不过和scanf()混合起来用并且scanf()在前面的话,就要加一个fflush(stdin)语句。。。
    呵呵。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册