求大神帮忙看一下这个代码,有个语句不太明白!!!!

mojoggg 发布于 2013/11/15 10:13
阅读 177
收藏 0
#include<stdio.h> 
#include<ctype.h> 
#include<stdlib.h> 
char token[61]; /*存放表达式字符串的数组*/  
int n=0; 
void error(void) /*报告错误函数*/ 
{     
printf("ERROR!\n"); 
   exit(1); 
} 
  
void match(char expected) /*检查字符匹配的函数*/ 
{ 
   if(token[n]==expected) 
   token[++n]=getchar(); 
else error(); 
} 
double term(void); /*计算乘除的函数*/ 
double factor(void); /*处理括号和数字的函数*/ 
double exp(void) /*计算加减的函数*/ 
{ 
  double temp=term(); 
  while((token[n]=='+')||(token[n]=='-')) 
  switch(token[n]) 
{ 
  case'+':match('+');  
temp+=term(); 
  break; 
  case'-':match('-'); 
  temp-=term(); 
  break;  
} 
return temp;  
} 
double term(void) 
{ 
  
double div; 
double temp=factor(); 
while((token[n]=='*')||(token[n]=='/')) 
switch(token[n]) 
{ 
  case'*':match('*'); 
  temp*=factor(); 
  break; 
  case'/':match('/'); div=factor(); 
  if(div==0) /*处理除数为零的情况*/ 
{ 
     printf("The divisor is zero!\n"); 
     exit(1); 
   } 
  temp/=div; 
  break; 
} 
 return temp; 
 } 
  double factor(void) 
 { 
  double temp; 
  char number[61]; 
  int i=0; 
  if(token[n]=='(') 
 { 
     match('('); 
     temp=exp(); 
     match(')'); 
   } 
  else if(isdigit(token[n])||token[n]=='.') 
   { 
     while(isdigit(token[n])||token[n]=='.') /*将字符串转换为浮点数*/ 
      { 
        number[i++]=token[n++]; 
        token[n]=getchar(); 
      } 
    number[i]='\0'; 
    temp=atof(number);  
   } 
  else error(); 
  return temp; 
} 
  
main() 
{ 
double result; 
    FILE *data=fopen("61590_4.dat","at");
 if(data==NULL)
    data=fopen("61590_4.dat","wt"); 
    if(data==NULL) 
    return 0; 
    token[n]=getchar();
result=exp(); 
    if(token[n]=='\n') 
     { 
       token[n]='\0'; 
       printf("%s=%g\n",token,result); 
} 
    else error(); 
    system("pause");
    return 0; 
    getch(); 
 }

这句

if(token[n]=='(')
{
     match('(');
     temp=exp();
     match(')');
   }
和这句

printf("%s=%g\n",token,result);

不太明白,求大神指点!

 



加载中
0
中山野鬼
中山野鬼
if(token[n]=='(') 

     match('('); 
     temp=exp(); 
     match(')'); 

   } 


这个是由"(",触发表达式的递归解析。例如 (a+b) ,发现 ( ,则开始处理a+b,处理完后,才返回折腾)。哈。后面print这个自己查资料了。。当我不知道%s是什么意思。哈

mojoggg
mojoggg
谢谢,懂了,哈哈
0
zhizhang007
zhizhang007

printf("%s=%g\n",token,result);
%s字符串输出。。当我不知道%g是什么意思。哈


mojoggg
mojoggg
3q,哈哈
返回顶部
顶部