请教代码问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 10:29:47
#include <stdio.h>
#include <string.h>

char prog[20],token[8],s[10],s1[10];
char ch,ch1;
int p,k,i;
char* e1_place;
char* e2_place;
char* t1_place;
char* t2_place;
char* temp;
char* place;
char* entry(char);
char* newtemp();
char* f();
char* t();
char* e();

void main( )
{ p=0;
printf("\n please input the source program:\n");
do { ch=getchar();
prog[p++]=ch;
} while (ch!='#');
p=0; k=1;
ch=prog[p++];
if ((ch=='a') || (ch=='b')|| (ch=='c') || (ch=='('))
e( );
else k=0;
if ((ch=='#') && (k==1))
printf("success");
else printf("error");
}

char* e( )
{ e1_place=t(); // 调 t 函数, 返回其值
while (ch=='+'||ch=='-') //while ch是

程序中存在的问题:
1。各个子函数通过全局变量进行通信,逻辑不清析;
2。由于函数调用链中存在递归,而且调用链中的每一步都可能改变共享全局变量的值,造成子函数返回后使用的内容早已不是期望的值!(例如:e()->t()->f()->e(),从而,e或者t中的输出语句使用的全局变量早已被改变)

程序改正后如下:(仅仅为了实现正确语义,至于程序设计上的不足要改就翻天覆地了:-)
#include <stdio.h>
#include <string.h>

#define EXP_LENGTH 10
char prog[20],token[8],s[EXP_LENGTH],s1[EXP_LENGTH];
char ch/*,ch1*/;
int p,k,i;
/*
char* e1_place;
char* e2_place;
char* t1_place;
char* t2_place;
*/
char* temp;
char* place;
char* entry(char);
char* newtemp();
char* f();
char* t();
char* e();

void main( )
{ p=0;
printf("\n please input the source program:\n");
do { ch=getchar();
prog[p++]=ch;
} while (ch!='#');
p=0; k=1;
ch=prog[p++];
if ((ch=='a') || (ch=='b')|| (ch=='c') || (ch=='('))
delete e();
else k=0;
if ((ch=='