| 
 | 
 
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; 
} 
 
 
程序可以打开当时输入后按回车就报错!!!求大神指点!!!!! 
 |   
 
 
最佳答案
查看完整内容 
你的代码真的很烂,不是说质量,说的是风格,代码应该条理分明,这是提问最起码的态度!本来真心不想帮你改代码。 
 
 
 
 
 
 
 |