为什么在 Dev c++里运行不了?

#include
#include
#include
using namespace std;
int factor()//读入一个因子返回其值
{
int result=0;
char c=cin.peek();
if(c=='(')
{
cin.get();
result=expression();
cin.get();
}
else
{
while(isdigit(c))
{
result=10*result+c - '0';c
cin.get();
c=cin.peek();
}
}
return result;
}

int term()//一项
{
int result=factor();
while(1)
{
char op=cin.peek();
if(op=='*'||op=='/')
{
cin.get();
int value=factor();
if(op=='*')
result*=value;
else result/=value;
}
else break;
}
return result;
}
int expression()//表达式
{
int result=term(); //求第一项的值
while(1)
{
char op=cin.peek();
if(op=='+'||op=='-')
{
cin.get();
int value=term();
if(op=='+') result+=value;
else result-=value;
}
else break;
}
return result;
}

int main()
{
cout<<expression()<<endl;
return 0;
}


在int factor()前加

int expression();

去掉

result=10*result+c - '0';c

最后面的c

编译通是没问题,但你几个函数循环调用,确定不会出问题,自己试试:

#include<iostream>
#include<cstring>
#include<cstdlib>

using namespace std;
int term();//一项 
int expression();//表达式 
int factor();//读入一个因子返回其值 


int main()
{
    cout << expression() << endl;
    return 0;
}

int expression()//表达式 
{
    int result = term(); //求第一项的值
    while (1)
    {
        char op = cin.peek();
        if (op == '+' || op == '-')
        {
            cin.get();
            int value = term();
            if (op == '+') result += value;
            else result -= value;
        }
        else break;
    }
    return result;
}

int factor()//读入一个因子返回其值 
{
    int result = 0;
    char c = cin.peek();
    if (c == '(')
    {
        cin.get();
        result = expression();
        cin.get();
    }
    else
    {
        while (isdigit(c))
        {
            result = 10 * result + c - '0';
            cin.get();
            c = cin.peek();
        }
    }
    return result;
}


int term()//一项 
{
    int result = factor();
    while (1)
    {
        char op = cin.peek();
        if (op == '*' || op == '/')
        {
            cin.get();
            int value = factor();
            if (op == '*')
                result *= value;
            else result /= value;
        }
        else break;
    }
    return result;
}