猿问

关于c的编程问题(表达式计算)急!!!!

这个编程第57行报错了要怎么改啊??求大神赐教

#include<malloc.h>
#include<stdio.h>
#include<ctype.h>//判断是否为字符函数的头文件 
#include<stdlib.h>
#define MAXSIZE 100
typedef int boo1;
#define ture 1
#define false 0
typedef int elemtype;
char ch[7]={'+','-','*','/','(',')','#'};//把符号转换成一个字符数组 
int f1[7]={3,3,5,5,1,6,0};//栈内元素优先级 
int f2[7]={2,2,4,4,6,1,0};//栈外元素优先级 
int n=0;
typedef struct sqstack
{//顺序结构
    elemtype stack[MAXSIZE];
	int top; 
}sqstack;
//1.把操作的字符转化成相应的字符。 
elemtype cton(char c)
{ 
	switch(c)
	{
		case '+': return 0; 
		case '-': return 1;
		case '*': return 2;
		case '/': return 3;
		case '(': return 4;
		case ')': return 5;
		default:  return 6;
	}
} 
 //2.按设定比较两个字符的优先级。 
 char Compare(char c1,char c2)
 {
 	int i1=cton(c1);
 	int i2=cton(c2);//把字符变成数字 
 	if(f1[i1]>f2[i2])  return '>';//通过原来的设定找到优先级
	else if(f1[i1]<f2[i2])  return '<';
	else return '=';
}//end Compare
//3.进行四则运算,并返回计算结果。 
int Operate(elemtype a,elemtype t,elemtype b)
{
	int sum;
	switch(t)
	{
		case 0: sum=a+b; break;
		case 1: sum=a-b; break;
		case 2: sum=a*b; break;
		default: sum=a/b;
	}
	return sum;
 } 
//4.主要的表达式计算函数,返回表达式的计算结果。 
int EvaluateExpression()
 	char c;
 	int i=0,sum=0;
 	int k=1,j=1;//设置了开关变量 
 	elemtype x,t,a,b;
 	sqstack OPTR,OPND;
 	Initstack(&OPTR);//初始化操作符栈
	Push(&OPTR,cton('#'));//#符号压入操作符栈
	Initstack(&OPND);//初始化操作数栈
	c=getchar();
	while(c!='#'||ch[Gettop(OPTR)]!='#')
	{
		if(isdigit(c))
		{
			sum=0;
			while(isdigit(c))//判断c是否为数字 
			{
				if(!j)//j用来进行数字串的转换判断,j为0转换
				{
				    sum=sum*10-(c-'0');
				} 
				else sum=sum*10+(c-'0');//字符c转换成了对应的数字
				 c=getchar();
			}//当前c不为数字,则把之前的数字串转化成十进制数字再压栈
			Push(&OPND,sum);
			j=1; 
		}
		else if(k)
		{
			switch(Compare(ch[Gettop(OPTR)],c))
			{
				case'<':Push(&OPTR,cton(c));//把字符整型化,然后入操作栈
				        c=getchar();
						break;
				case'=':Pop(&OPTR,&x);//操作符栈顶元素出栈 
				        c=getchar();
						break;
				case'>':Pop(&OPTR,&t);//操作符栈栈顶元素出栈 
						Pop(&OPND,&b);//操作数栈栈顶元素出栈
						Pop(&OPND,&a);//操作数栈栈顶元素出栈
						Push(&OPND,Operate(a,t,b));
						break;		 
			}
		}
	}//endwhile
	return(Gettop(OPND)); 
   //endEvaluateExpression
//5.取栈顶元素
elemtype  Gettop(sqstack s)
{ 
	if(s.top==0)
	{
		printf("ERROR,underflow\n"); return 0;
	}
	else
	return s.stack[s.top];
}   
//6.初始化栈
void Initstack(sqstack*s)
{
	s->top=0;
} 
//7.出栈
void Pop(sqstack*s,elemtype*x)
{
	if(s->top==0)
	printf("ERROR,Underflow!\n");
	else
	{
		*x=s->stack[s->top];
		s->top--;
	}
}
//8.入栈
void Push(sqstack*s,elemtype x)
{
	if(s->top==MAXSIZE-1)
	printf("ERROR,Overflow!\n");
	else
	{
		s->top++;
		s->stack[s->top]=x;
	}
}//end Push
//9.若S为空栈,则返回TURE,否则返回FALSE
bool StackEmpty(sqstack S)
{
	if(S.top==0) return ture;
	else return false;
}
//10.主函数。设定界面的颜色大小,调用计算模块函数
main()
{
	int result;
	system("color 1f");
	system("mode con:cols=80 lines=35");
	printf("************欢迎使用表达式求值小程序************\n\n");
	printf("请输入您的算术表达式(以#号结束):");
	result=EvaluateExpression();
	printf("表达式的计算结果是:%d",result);
	printf("************感谢您的使用,再见!************\n\n");
//	return 0;
}


一天不见i
浏览 1155回答 1
1回答

最初__

很明显,前面少打了一个左括号。。。。   {  
随时随地看视频慕课网APP
我要回答