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

我做的是编译原理的程序 为什么我的这个程序运行七次后(我设了个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[n]=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); }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值