你的代码真的很烂,不是说质量,说的是风格,代码应该条理分明,这是提问最起码的态度!本来真心不想帮你改代码。#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef char LX;
typedef struct StackNode
{
LX data;
struct StackNode *next;
}StackNode,*LinkStackptr;
typedef struct
{
LinkStackptr top;
int count;
}LinkStack;
void push( LinkStack *s , LX x )
{
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode)); //调试的时候这里有问题
if( p == NULL )
{
perror("push():");
}
p->data=x;
p->next=s->top;
s->top=p;
s->count++;
}
void pop(LinkStack *s,int *x)
{
LinkStackptr p;
*x = s->top->data - '0';
p=s->top;
s->top=p->next;
free(p);
s->count--;
}
int main()
{
LinkStack *s;
int i = 0, len;
LX x;
int a,b,res;
LX str[10];
s=(LinkStack *)malloc(sizeof(LinkStack));
s->count=0;
s->top = NULL;
printf("input:");
scanf("%c",&x);
while( x!='#' )
{
if( isdigit(x) ) //判断输入是否为数字或'.'(小数点)。
{
if( i >= 9 )
{
printf("too much!\n");
break;
}
str[i++]=x;
push( s , x );
}
switch( x )
{
case '+':
pop(s,&b);
pop(s,&a);
push(s,(a+b) + '0');
break;
case '-':
pop(s,&b);
pop(s,&a);
push(s,(a-b) + '0');
break;
case '*':
pop(s,&b);
pop(s,&a);
push(s,(a*b) + '0');
break;
case '/':
pop(s,&b);
pop(s,&a);
if(b==0)
{
printf("输入有误,除数不能为0 \n");
}
else
push(s,(a/b) + '0');
break;
}
scanf("%c",&x);
}
pop(s,&res);
printf("answer is:%d\n",res);
return 0;
}
|