/*输入一个个位数的数学表达式,如6+3*(9-5)/2-8,并将运行程序后将结果显示在屏幕上。/为什么输出不了结果,哪出错了?帮忙看看,多谢啦

/*输入一个个位数的数学表达式,如6+3*(9-5)/2-8,并将运行程序后将结果显示在屏幕上。*/为什么输出不了结果,哪出错了?帮忙看看,谢谢啦
#include<stdio.h>
#include<malloc.h>
typedef char type;
typedef struct node
{
 type *base;
 type *top;
}sqstack;

void initstack(sqstack *s)
{
 s->base=(type *)malloc(sizeof(type));
 s->top=s->base;
}

type push(sqstack *s,type x)
{
 if(s->base==s->top)
  *s->base=x;
 else *s->top=x;
 s->top=(type *)malloc(sizeof(type));
 return x;
}

type gettop(sqstack *s,type x)
{
 if(s->base==s->top)
  return 0;
 else x=*(--s->top);
    return x;
}

type pop(sqstack *s,type x)
{
 if(s->base==s->top)return 0;
 else x=*(--s->top);
 return x;
}

int firstvalue(char ch)
{
 int k;
 switch(ch)
 {
 case '+':k=0;break;
 case '-':k=1;break;
 case '*':k=2;break;
 case '/':k=3;break;
 case '(':k=4;break;
 case ')':k=5;break;
 case '#':k=6;break;
 }
 return k;
}

type sign(char ch1,char ch2)
{
int i,j;
char a[7][7]={

{'>','>','<','<','<','>','>'},

{'>','>','<','<','<','>','>'},

{'>','>','>','>','<','>','>'},

{'>','>','>','>','<','>','>'},

{'<','<','<','<','<','=',' '},

{'>','>','>','>',' ','>','>'},

{'<','<','<','<','<',' ','='}

};
i=firstvalue(ch1);
 
    j=firstvalue(ch2);//调用函数两次,返回两个函数值
 
    return a;
}

type count(char a,char b,char c)
{
int l;
switch(c)
{
case '+':l=(a-'0')+(b-'0');break;
case '-':l=(a-'0')-(b-'0');break;
case '*':l=(a-'0')*(b-'0');break;
case '/':l=(a-'0')/(b-'0');break;
}
return(l+'0');
}

void main()//主函数
{
char m,n;
char c,a,d,b,e='z';
sqstack s1,s2;
initstack(&s1);push(&s1,'#');
initstack(&s2);
printf("请输入表达式,以#结尾\n");
c=getchar();
while(c!='#'||gettop(&s1,e)!='#')    
{
if(c<='9'&&c>='0')
{
push(&s2,c);
c=getchar();
}
else
switch(sign(gettop(&s1,e),c))
{
   case'<':push(&s1,c);c=getchar();break;
   case'=':pop(&s1,e);c=getchar();break;
   case'>':d=pop(&s1,e);a=pop(&s2,e);b=pop(&s2,e);n=count(b,a,d);push(&s2,n);break;
}
}
m=gettop(&s2,e);
printf("结果为:%d\n",m-'0');
}
c sizeof

------解决方案--------------------

int firstvalue(char ch)
{
int k = 0;
switch(ch)
{
case '+':k=0;break;
case '-':k=1;break;
case '*':k=2;break;
case '/':k=3;break;
case '(':k=4;break;
case ')':k=5;break;
case '#':k=6;break;
default : printf("error");
}
return k;
}

type count(char a,char b,char c)
{
int l=0;
switch(c)
{
case '+':l=(a-'0')+(b-'0');break;
case '-':l=(a-'0')-(b-'0');break;
case '*':l=(a-'0')*(b-'0');break;
case '/':l=(a-'0')/(b-'0');break;
default : printf("error");
}
return(l+'0');
}



我这样修改楼主的代码 全部打印出error 楼主自己再研究一下吧 
------解决方案--------------------

/* 在BC31下编译 或VC6.0*/
/* compile under Borland C++ 3.1 or Visual C++ 6.0*/

/*#include "stdafx.h"*/
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"

#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100/*存储空间初始分配量*/
#define STACKINCREMENT 20/*存储空间分配增量*/

typedef struct
{
int *pBase;/*在构造之前和销毁之后,base的值为NULL*/
int *pTop;/*栈顶指针*/
int StackSize;/*当前已分配的存储空间,以元素为单位*/
}Stack;

typedef int BOOLEAN;

char Operator[8]="+-*/()#";/*合法的操作符存储在字符串中*/
char Optr;/*操作符*/
int Opnd=-1;/*操作符*/
int Result;/*操作结果*/

/*算符间的优先关系*/
char PriorityTable[7][7]=
{
{'>','>','<','<','<','>','>'},