void JudgeFopen_s(errno_t err); /* 判断文件打开是否成功 */
void ReadFile(FILE *fp, char *ss); /* 读取文件内容 */
double TransformCtoD(char ch); /* 将char类型数组的每一个元素转换为double */
void CalculateAndPush(double *num, int *i, int *j, char mm); /* 计算结果并入栈 */
int main()
{
FILE *fp;
errno_t err;
char ss[MAX]; /* 存储逆波兰表达式 */
int i = 0;
int j = 0;
double num[MAX]; /* 栈 */
err = fopen_s(&fp, "E:\\ww.txt", "r");
JudgeFopen_s(err); /* 判断文件打开是否成功 */
ReadFile(fp, ss); /* 读取文件内容,存储到ss中*/
while (ss[i] != '\0')
{
if (ss[i] >= '0' && ss[i] <= '9') /* 如果是数字 */
{
/* 因为num是char类型的,需要转换为double类型方便计算 */
num[j] = TransformCtoD(ss[i]); /* 将数字存储到栈中 */
j++;
i++;
}
else if (ss[i] == '+' || ss[i] == '-' || ss[i] == '*' || ss[i] == '/')
{
CalculateAndPush(num, &i, &j, ss[i]); /* 计算结果并入栈 */
}
else if (ss[i] == '\n') /* 如果是换行符,结束循环*/
{
break;
}
}
printf("%lf", num[0]);
return 0;
}