用一个函数输入字符串后,希望利用另一个函数显示,怎么显示不出来?
程序代码:#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");
}








