为什么expr()函数里的value会显示出来 ?

就是一个简单地计算器,能处理一串输入
程序是没有什么问题的,但是我看不懂为什么expr()函数里的value会显示出来
??
expr()里面不是没有return value这句吗
疑惑啊 哪位指点一下
#include <iostream>
#include<cstdlib>
#include<cctype>
using namespace std;
void eatspaces(char* str);
double expr(char* str);
double term(char* str,int& index);
double number(char* str,int& index);

const int MAX =80;

int main()
{
char buffer[MAX]={0};

cout<<endl
<<"Welcome!"
<<endl
<<"Enter an expression,or an empty line to quit."
<<endl;
for(;;)
{
cin.getline(buffer,sizeof buffer);
eatspaces(buffer);

if(!buffer[0])
return 0;
cout<<"="<<expr(buffer)<<endl;
}
}

void eatspaces(char* str)
{
int i=0;
int j=0;

while((*(str+i)=*(str+j++))!='\0')
if(*(str+i)!=' ')
i++;
return;
}

//Function to evaluate an arithmetic expression
double expr(char* str)
{
double value=0.0;
int index=0;
value=term(str,index);

for(;;)
switch(*(str+index++))
{
case '\0':
return value;

case '+':
value+=term(str,index);
break;

case '-':
value-=term(str,index);
break;

default:
cout<<endl
<<"Arrrgh!*#!! There's an error"
<<endl;
exit(1);
}
}

//Function to get the value of a term
double term(char* str,int& index)
{
double value=0.0;
value=number(str,index);

while((*(str+index)=='*')||(*(str+index)=='/'))
{
if(*(str+index)=='*')
value *=number(str,++index);

if(*(str+index)=='/')
value /=number(str,++index);
}
return value;
}

//Function to recognize anumber in a string
double number(char* str,int& index)
{
double value =0.0;

while(isdigit(*(str+index)))
value=10*value+(*(str+index++)-'0');
if(*(str+index)!='.')
return value;
double factor=1.0;
while(isdigit(*(str+(++index))))
{
factor *=0.1;
value=value+(*(str+index)-'0')*factor;
}
return value;
}

程序是没有什么问题的,当时我看不懂为什么expr()函数里的value会显示出来
??
expr()里面不是没有return value这句吗
疑惑啊 哪位指点一下

临摹微笑
浏览 211回答 2
2回答

MYYA

有 return 啊,for(;;)switch(*(str+index++)){case '\0':return value; //这句就是返回值啊,for循环无限switch 直到case‘\0’就return value;case '+':value+=term(str,index);break;case '-':value-=term(str,index);break;default:cout<<endl<<"Arrrgh!*#!! There's an error"<<endl;

MM们

怎么没有return value啊。double expr(char* str){double value=0.0;int index=0;value=term(str,index);for(;;)switch(*(str+index++)){case '\0':return value;//这里不是吗。case '+':value+=term(str,index);break;case '-':value-=term(str,index);break;default:cout<<endl<<"Arrrgh!*#!! There's an error"<<endl;exit(1);}}
打开App,查看更多内容
随时随地看视频慕课网APP