|
10鱼币
逆波兰的主函数。
int main()
{
sqStack s;
char c;
double d,e;
char str[MAXBUFFER];
int i=0;
InitStack(&s);
printf("please with nibolan expression input,\nnumber and expression use ' ' separation and as '#' over:");
scanf("%c",&c);
while(c!='#')
{
while(isdigit(c)||c=='.')//用于过滤数字。
{
str[i++]=c;
str[i]='\0';//????小甲鱼说让我们去掉这行运行会有问题,我试了试没事啊?小甲鱼重点说这行有很重要的作用,所以想问问?这行有什么用?:smile
if(i>=10)
{
printf("\nerror,input single data too big!\n");
return -1;
}
scanf("%c",&c);
if(c==' ')
{
d=atof(str);
Push(&s,d);
i=0;
break;
}
}
switch(c)
{
case '+':
Pop(&s,&e);
Pop(&s,&d);
Push(&s,d+e);
break;
case '-':
Pop(&s,&e);
Pop(&s,&d);
Push(&s,d-e);
break;
case '*':
Pop(&s,&e);
Pop(&s,&d);
Push(&s,d*e);
break;
case '/':
Pop(&s,&e);
Pop(&s,&d);
if(e!=0)
{
Push(&s,d/e);
}
else
{
printf("\nerror,divisor is zeor.\n");
return -1;
}
break;
}
scanf("%c",&c);
}
Pop(&s,&d);
printf("the operation result in the end:%f\n",d);
return 0;
}
|
最佳答案
查看完整内容
str='\0';// 你这个句有错误,没有中括号, 这句就是在字符数组后面加上\0 每一个字符数组都要以0结尾 要不计算机就不知道段字符有多长,问题出现也是有一定的几率 不是每次都会出现,原因是 你设置的这段字符后面 默认的是0 所以没出什么问题 ,如果字符过长,就不一定了!
|