user-0 提问: 请问这个四则运算 错在哪

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。老师说的对

user: user-0
content: 引用 3 楼 ACMtop 的回复:好烦老师说的对

user: user-0
content: 引用 6 楼 ni_mamagea 的回复:很遗憾跟你说，代码太长了，没全看完，感觉看不大懂。。。

user: user-1
content: 很遗憾跟你说，代码太长了，没全看完，感觉看不大懂。。。

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-3
content: /*上面赵老师说的甚是*/ 楼主主要问题在于传值和传址不清楚，算法是对的，没细看，调式几次没啥问题，代码修改如下：  #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h>    #define OK 1 #define ERROR 0  // type of number operator typedef struct LinkNodeOVS{ 	int data; 	struct LinkNodeOVS *next; } LinkSackNodeNum, *LinkStackNum;  void Init_Stack1(LinkStackNum *top) {      *top = NULL; }  int Push1(LinkStackNum *top,int e) { 	LinkStackNum p; 	p=(LinkSackNodeNum*)malloc(sizeof(LinkSackNodeNum)); 	p->data=e; 	p->next=*top; 	*top=p; 	return  OK; }  int Pop1(LinkStackNum *top,int *e) { 	LinkStackNum temp; 	if(!*top) 		return ERROR;    	*e=(*top)->data; 	temp=*top; 	*top=temp->next; 	free(temp); 	return OK; }  int GetTop1(LinkStackNum top) { 	return(top->data);     }    // type of char operation typedef struct LinkNodeOP{ 	char data; 	struct LinkNodeOP *next; } LinkSackNodeOP, *LinkStackOP;  void Init_Stack(LinkStackOP *top) { 	*top = NULL; }  int Push(LinkStackOP *top,char e) { 	LinkStackOP p; 	p=(LinkSackNodeOP*)malloc(sizeof(LinkSackNodeOP)); 	p->data=e; 	p->next=*top; 	*top=p; 	return OK;     }  int Pop(LinkStackOP *top,char *e) { 	LinkStackOP temp; 	if(!*top) 		return ERROR;    	temp = *top; 	*e=temp->data; 	*top = temp->next; 	free(temp); 	return OK; }  char GetTop(LinkStackOP top) { 	return top->data;     }       int cmp[7][7]={{2,2,1,1,1,2,2},    /*operator PRI,3:'=',2:'>',1:'<',0 no compare*/                 {2,2,1,1,1,2,2},                 {2,2,2,2,1,2,2},                 {2,2,2,2,1,2,2},                 {1,1,1,1,1,3,0},                 {2,2,2,2,0,2,2},                 {1,1,1,1,1,0,3}}; char ops[7]={'+','-','*','/','(',')','#'};   int Isoperator(char ch)      /*if ch is operator, return TRUE or return FALSE*/ { 	char ops[7]={'+','-','*','/','(',')','#'}; 	int i; 	for (i=0;i<7;i++) 	{ 		if(ch==ops[i]) 			return 1; 	} 	return 0; }   char Compare(char ch1, char ch2)   /*compare operator PRI*/ { 	int i,m,n; 	char pri; 	int priority; 	for(i=0;i<7;i++)              /*find the relative position of operator */ 	{ 		if(ch1==ops[i]) 			m=i; 		if (ch2==ops[i]) 			n=i; 	}  	priority = cmp[m][n]; 	switch(priority) 	{ 	case 1: 		pri='<'; 		break; 	case 2: 		pri='>'; 		break; 	case 3: 		pri='='; 		break; 	case 0: 		pri='$'; 		printf("error !\n"); 		break; 	} 	return pri; }  int Compute(int a,char op,int b) { 	int ret = 0; 	switch (op) 	{ 	case '+': ret = a+b; break; 	case '-': ret = a-b; break; 	case '*': ret = a*b; break; 	case '/': ret = a/b; break;                        	} 	return ret; }  int ExpEvaluation() { 	char ch,op; 	int v,a,b,temp,i=0; 	char *str;  	LinkStackOP OPTR; 	LinkStackNum OVS;  	Init_Stack(&OPTR); 	Init_Stack1(&OVS);  	Push(&OPTR,'#'); 	printf("\nPlease input one expression which of the last character is '#':\n") ; 	str =(char *)malloc(50*sizeof(char)); 	fgets(str, 50, stdin);  	ch=str[i]; 	i++;  	while(ch!='#' || GetTop(OPTR)!='#') 	{ 		if(!Isoperator(ch)) 		{ 			// num=GetNum(ch); 			//Push1(OVS,num);  			temp=ch-'0';    /*put char to dec*/ 			ch=str[i]; 			i++;   			while(!Isoperator(ch)) 			{ 				temp=temp*10 + ch-'0'; 				ch=str[i]; 				i++; 			} 			Push1(&OVS,temp); 		} 		else 		{ 			switch (Compare(GetTop(OPTR),ch)) 			{ 			case'<': Push(&OPTR,ch); 				ch=str[i]; 				i++; 				break; 			case'>': Pop(&OPTR,&op); 				Pop1(&OVS,&b); 				Pop1(&OVS,&a);     				v=Compute(a,op,b);                        				Push1(&OVS,v); 				break; 			case'=': Pop(&OPTR,&op); 				ch=str[i]; 				i++; 				break; 			}  		} 	}      	v=GetTop1(OVS); 	return v; }  int main() { 	int result; 	result=ExpEvaluation(); 	printf("\nexpression result:%d\n",result); 	return 0; }

user: user-0
content: 好烦

user: user-0
content: 道友速来就我

user: user-0