C语言后缀表达式还原为中缀表达式

本文提供了C++支持下的C语言后缀表达式还原为中缀表达式。

可供初学者自学,如有出错不吝提出。

/*
Updated 2022.7.9
Bug fixed: cannot calculate decimals.
comments: change int to float. 
*/
#include<stdio.h>
typedef struct{
	float data[100];
	int top;
}SqStack;

bool InitStacks(SqStack &S){
	S.top = -1;
	return true;
}

bool EnStack(SqStack &S, float pushData){
	S.data[++S.top] = pushData;
	return true;
}

bool CalcElem(SqStack &S,int info){
	switch(info){
		case '+' : S.data[S.top - 1] += S.data[S.top];S.top--;break;
		case '-' : S.data[S.top - 1] -= S.data[S.top];S.top--;break;
		case '*' : S.data[S.top - 1] *= S.data[S.top];S.top--;break;
		case '/' : S.data[S.top - 1] /= S.data[S.top];S.top--;break;
	}
	return true;
} 

bool ReadData(SqStack &S){
	char info;float pushData = 0;int flag = 1;
	while(1){
		scanf("%c",&info);
		if(info >= '0' && info <= '9'){
			flag = 1;
			pushData = (float)pushData * 10 + (info - '0');
			continue;
		}
		if(info == ' '){
			if(flag == 1)//只有前面是数字才需要再次压栈 
				EnStack(S,pushData);
			pushData = 0;
			continue;
		}
		if(info == '+' || info == '-' || info == '*' || info == '/'){
			flag = 0;
			CalcElem(S,info);
			continue;
		}
		if(info == 10) break;
	}
	return true;
}

int main(void){
	SqStack S;
	InitStacks(S);
	ReadData(S);
	if(S.top != 0)
		printf("Error!\n");
	else
		printf("%g",S.data[S.top]);
	return 0;
}