用一个函数输入字符串后,希望利用另一个函数显示,怎么显示不出来?
程序代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 #define MAXSIZE 100 char vn[N]; char vt[N]; char X[N]; int Y[N]; char str[N]; int scount,vn_num,vt_num; int first[N][N]; int fellow[N][N]; int select[N][N]; typedef struct wenfa { char ca[6]; }elemtype; typedef struct LL_1 { elemtype data[MAXSIZE]; int last; }test; //函数声明 int menu(); void input(test *L); void count(test *L); void operate0(); void operate(char c); void isnull(test *L); void disp1(); void disp0(test *L); void main () { int ichoose; test *L; L=(test*)malloc(sizeof(test)); L->last=-1; input(L); operate0(); count(L); while(ichoose!=7) { ichoose=menu(); switch(ichoose) { case 0 :disp0(L);break; case 1 :isnull(L);disp1(); break; case 5 :exit(0); } } } int menu() /*菜单函数*/ { int ia,ichoose; system("cls"); for(ia=0;ia<5;ia++) printf("\n"); printf(" 从菜单中选择一项:\n\n\n"); printf("\t\t\t0--显示输入文法\n\n"); printf("\t\t\t1--判空\n\n"); /* printf("\t\t\t2--FIRST集\n\n"); printf("\t\t\t3--FELLOW集\n\n"); printf("\t\t\t4--SELECT集\n\n");*/ printf("\t\t\t5--退出\n\n"); printf(" 请选择:"); scanf("%d",&ichoose); return ichoose; /*返回选择值*/ } void input(test *L)//输入文法 { int ia=0; int scount; printf("请输入文法个数:\n"); scanf("%d",&scount); for(ia=0;ia<scount;ia++) { printf("%d\t",ia); scanf("%s",&str[ia]); strcpy(L->data[ia].ca,&str[ia]); L->last=ia; } } void count(test *L) { char ch; int ia,i; for(ia=0;ia<scount;ia++) { for(i=0;i<(int)strlen(L->data[ia].ca);i++) { int count=0; ch=L->data[ia].ca[i]; if(ch>='A'&&ch<='Z') { for(int j=0;j<=vn_num;j++) { if(ch==vn[j]) { count++; break; } } if(count==0) { vn[vn_num]=ch; vn_num++; } } else if(ch>='a'&&ch<='z') { for(int j=0;j<=vt_num;j++) { if(ch==vt[j]) { count++; break; } } if(count==0) { vt[vt_num]=ch; vt_num++; } } } } } void operate0()//将first等置空 { int ia,ib; for(ia=0;ia<vn_num;ia++) { for(ib=0;ib<8;ib++) { first[ia][ib]=0; fellow[ia][ib]=0; } } for(ia=0;ia<10;ia++) { for(ib=0;ib<8;ib++) { select[ia][ib]=0; } } } void disp0(test *L) { int ia; for(ia=0;ia<scount;ia++) { printf("%s\n",&L->data[ia].ca); } } //判空 void operate(char c) { int ia; for(ia=0;ia<vn_num;ia++) if(c==vn[ia]) { Y[ia]=1; break; } } void isnull(test *L) { int ib,ic,id; //若遇到符号"ε",检查左部非终结符状态,若不是"空",将其置为"空",继续扫描下一产生式; char temp1,temp2,temp3; for(ib=0;ib<10;ib++) { if(L->data[ib].ca[3]=='@') { operate(L->data[ib].ca[0]); } } for(ib=0;ib<scount;ib++) { for(ic=3;ic<(int)strlen(L->data[ib].ca);ic++) { if(L->data[ib].ca[ic]>='a'&&L->data[ib].ca[ic]<='z') { temp1=L->data[ib].ca[0]; for(id=0;id<vn_num;id++) { if(temp1==vn[id]) if(Y[id]==-1) Y[id]=0; } break; } else if(L->data[ib].ca[ic]>='A'&&L->data[ib].ca[ic]<='Z') { temp2 = L->data[ib].ca[0]; for(id=0;id<(int)strlen(L->data[ib].ca);id++) { if(temp2==vn[id]) if(Y[id]==-1) break; else if(Y[id]==0) { temp3=L->data[ib].ca[0]; for(id=0;id<5;id++) { if(temp3==vn[id]) if(Y[id]==-1) Y[id]=0; else if(Y[id]==1) break; } } } break; } else if(L->data[ib].ca[ic]=='\0') for(id=0;id<scount;id++) if(L->data[id].ca[0]==vn[id]) { Y[id] = 1; break; } } } } void disp1() { int ia; printf("可以推出空的是:\n"); for(ia=0;ia<vn_num;ia++) { if(Y[ia]==1) printf("%c",vn[ia]); } printf("\n"); system("pause"); }