|
3鱼币
代码如下:
#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)); //调试的时候这里有问题
p->data=x;
p->next=s->top;
s->top=p;
s->count++;
}
void pop(LinkStack *s,LX *x)
{
LinkStackptr p;
*x=s->top->data;
p=s->top;
s->top=p->next;
free(p);
s->count--;
}
int main()
{
LinkStack s,*p;
int i,len;
LX x;
double a,b,res;
LX str[10];
p=&s;
p=(LinkStack *)malloc(sizeof(LinkStack));
s.count=0;
printf("请输入一个逆波兰表达式(以'#'结尾): ");
scanf("%c",&x);
while(x!='#')
{
while(isdigit(x) || x=='.') //判断输入是否为数字或'.'(小数点)。
{
str[i++]=x;
str='\0';
if(i>=10)
{
printf("输入的数据个数过多!");
}
scanf("%c",&x);
if(x==' ')
{
a=atof(str);
push(&s,a);
i=0;
break;
}
}
switch(x)
{
case '+':
pop(&s,&b);
pop(&s,&a);
push(&s,a+b);
break;
case '-':
pop(&s,&b);
pop(&s,&a);
push(&s,a-b);
break;
case '*':
pop(&s,&b);
pop(&s,&a);
push(&s,a*b);
break;
case '/':
pop(&s,&b);
pop(&s,&a);
if(b==0)
{
printf("输入有误,除数不能为0 \n");
}
else
push(&s,a/b);
break;
}
scanf("%c",&x);
}
//从缓冲区去除'\n'
pop(&s,&res);
printf("运算的结果为: %f\n",res);
return 0;
}
程序可以打开当时输入后按回车就报错!!!求大神指点!!!!!
|
最佳答案
查看完整内容
你的代码真的很烂,不是说质量,说的是风格,代码应该条理分明,这是提问最起码的态度!本来真心不想帮你改代码。
|