【急】求大神一眼看破我程序的错误,可以成功调试,不过结果不是我想要的,看一下吧
//程序实现多则运算及有括号的运算
#include<stdio.h>
#include<stdlib.h>
char TOK;
void match();
float low();
float mid();
float high();
void match( char matching ) //对当前的标志进行匹配
{
if( TOK == matching ) TOK = getchar(); //匹配成功,获取下一个标志
else
{
printf("匹配不成功!\n");
exit(1); //匹配不成功,退出程序
}
}
float high() //用于计算表达式中级别最高的运算,即带()的运算
{
float Result;
if( TOK == '(' ) //带有括号的运算
{
match( '(' );
Result=low(); //递归计算表达式
match(')');
}
else if ( TOK>= '0'&&TOK<='9' ) //实际的数字
{
ungetc( TOK, stdin ); //将读入的字符退还给输入流,为读取整个数
scanf( "%f", &Result ); //读出数字
TOK = getchar(); //读出当前的标志
}
else
{
printf("输入的不是括号也不是数字\n"); //不是括号也不是数字
exit(1);
}
return Result;
}
float mid() //用于计算表达式中级别较高的运算
{
float div; //除数
float Result = high(); //计算比乘除运算优先级别搞的部分
while((TOK == '*')||(TOK == '/'))
if(TOK == '*')
{
match('*'); //进行乘法运算
Result *= high();
break;
}
else
{
match('/'); //进行除法运算
div = high();
if(div == 0) //判断除数是否为0
{
printf("除数为0.\n");
exit(1);
}
Result /= div;
break;
}
return Result;
}
float low() //用于计算表达式中级别最低的运算
{
float Result= mid(); //计算比加减运算优先级别高的部分
while(( TOK == '+' ) || ( TOK == '-' ))
if ( TOK == '+')
{
match('+'); //进行加法运算
Result += mid();
break;
}
else if ( TOK == '-')
{
match('-'); //进行减法运算
Result -= mid();
break;
}
return Result;
}
main()
{
float Result; //运算的结果
printf("*****************************************\n"); //菜单
printf("***********欢迎使用 计算器***********\n");
printf("** 请输入一个类似于这样的式子 **\n");
printf("** 2+3/2*(4-2) **\n");
printf("*****************************************\n");
TOK = getchar(); //载入第一个符号
Result = low(); //进行计算
if( TOK == '\n' ) // 是否一行结束
printf( "=%f\n", Result );
else
{
printf( "出现了例外的字符!\n");
exit(1); //出现了例外的字符
}
getchar();
return 0;
}
谢谢大神帮助了,解决成功给分