|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
char import;
void match(char expectedimport) /*对当前的标志进行匹配*/
{
if(import == expectedimport)
import = getchar(); /*匹配成功,获取下一个标志*/
else
{
printf("cannot match\n");
exit(1); /*匹配不成功,退出程序*/
}
}
int high(void ) /*用于计算表达式中级别最高的运算,即带()的运算*/
{
int low(void);
int result;
if(import == '(') /*带有括号的运算*/
{
match('(');
result = low(); /*递归计算表达式*/
match(')');
}
else if(import>='0'&&import<='9') /*实际的数字*/
{
ungetc(import-48,stdin); /*将读入的字符退还给输入流,为读取整个数*/
scanf("%d",&result);
import = getchar(); /*读出当前的标志*/
}
else
{
printf("The input has unexpected char\n"); /*不是括号也不是数字*/
exit(1);
}
return result;
}
int mid(void )
{
int result = high();
while((import == '*')||(import == '/'))
if(import == '*')
{
match('*');
result *= high();
break;
}
else if(import == '/')
{
match('/');
result /= high();
break;
}
return result;
}
int low(void )
{
int result = mid();
while((import == '+')||(import == '-'))
if(import == '+')
{
match('+');
result += mid();
break;
}
else if(import == '-')
{
match('-');
result -= mid();
break;
}
return result;
}
int main()
{
char import;
int result; /*运算的结果*/
printf("请输入一个式子:");
import = getchar(); /*载入第一个字符*/
result = low(); /*进行计算*/
if(import == '\n') /*是否进行一行计算*/
printf("The answer is: %d\n",result);
else
{
printf("Unexpected char!");
exit(1); /*额外的字符*/
}
scanf("%d",result);
return 0;
}
只能编译,运行却计算不了,这是什么问题? |
|