您的位置:首页 > 编程语言 > C语言/C++

我有个问题想请高手解答一下!是C语言的!谢谢了!我有急用

2005-04-29 21:09 731 查看
我做的是编译原理的程序
为什么我的这个程序运行七次后(我设了个while 循环)还能运行可就是有错误
还在DOS下有提示:Nnll pointer assignment
请看下啊:#include
#include
FILE *f,*s,*id,*nu;
int cc=0;
char *bao[15]={"+","-","*","/",";","=","+=","-=","*=","/=",
"IDENT","NUMBER","if","then","else"};
char getcha(FILE*f)
{static ch[81];
char cha;
int i=0;
if(cc==0)
{
cha=fgetc(f);
while ( cha!=-1 && (i<80) )
{ch[i++]=cha;
cha=fgetc(f);}
if(cha==-1) ch[i]='.';
i=0;
}
cha=ch[cc++];
if(cc==79 || cha=='.')
cc=0;
if (cha==-1)
{ printf("/nfile is null!/n");
return cha=0;
}
else return cha;
}
void shuru()
{char ch1[100],ch,*p;
int i;
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
f=fopen("chengxu","w");
while(1)
{ p=ch1;
gets(ch1);
while (ch=*(p++))
fputc(ch,f);
if(*(p-2)=='.')
break;
}
fclose(f);
}
fputi(int i,FILE *s)
{ int n=0,ch[5],m;
while(i>=10)
{ ch[n++]=i%10;
i/=10;
}
ch
=i;
for(i=n;i>=0;i--)
fputc(ch[i]+'0',s);
fputc('#',s);
}
main()
{ char ch1,ch2,cha3,ch[11],*d;
int i,n=0,m=0;
do{ cc=0;
shuru();
f=fopen("chengxu","r");
s=fopen("sym","w");
id=fopen("ident","w");
nu=fopen("number","w");
ch1=getcha(f);
while(1)
if(ch1!='.')
{ if(ch1!=' ')
{ if(((ch1>=65) && (ch1<=90))||((ch1>=97) && (ch1<=122)))
{ i=0;
d=ch;
do{if(i<=9)
ch[i++]=ch1;
ch1=getcha(f);
} while (((ch1>=65)&&(ch1<=90))||((ch1>=97)&&(ch1<=122))||((ch1>='0')&&(ch1<='9'))) ;
ch[i]='/0';
for(i=12;(i<15)&&strcmp(d,bao[i]);i++);
if(strcmp(d,bao[i])==0)
fputi(i,s);
else {fputi(10,s);
i=0;
while(ch2=ch[i++])
fputc(ch2,id);
fputc('#',id);
}
}
else if((ch1>='0')&&(ch1<='9'))
{
do{ fputc(ch1,nu);
ch1=getcha(f);
} while((ch1>='0')&&(ch1<='9'));
fputc('#',nu);
fputi(11,s);
}
else if(ch1!=' ')
{ i=0;
do
{switch(ch1)
{ case '+':n=0;break;
case '-':n=1;break;
case '*':n=2;break;
case '/':n=3;break;
case ';':n=4;break;
case '=':n=5;break;
default :n=100;
}
if((ch1<65||ch1>90)&&(ch1<97 || ch1>122)&&(ch1<'0' || ch1>'9'))
{
ch[i++]=ch1;
ch1=getcha(f);
}
}while (n!=100);
ch[i]='/0';
if(i!=0 )
{ for(i=0;i<10 && strcmp(ch,bao[i]);i++);
if (strcmp(ch,bao[i])==0)
fputi(i,s);
else {
printf("/n%s :it is wrong!",ch);
break;
}
}
}
}
else ch1=getcha(f);
}
else break;
fclose(f);
fclose(s);
fclose(id);
fclose(nu);
fopen("chengxu","r");
f=fopen("sym","r");
fopen("ident","r");
fopen("number","r");
while((ch1=fgetc(f))!=-1)
putchar(ch1);
putchar('/n');
fclose(f);
printf("ones again?(y/n)");
cha3=getchar();
m++;
}while (cha3=='y' ||cha3=='Y');
printf("/n%d/n",m);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: