读书人

正在编词法分析程序上面是部分代码

发布时间: 2012-11-08 08:48:12 作者: rapoo

正在编词法分析程序,下面是部分代码,出现了点问题。向高手求帮助。。。
下面的是部分代码,问题是,判断保留字的时候,只能识别include,别的例如int char main等识别不了。。求帮助

#include<stdio.h>
#include <string.h>
int main()
{
char blzpd(char *b);
char ch;
int i=0,j;
char a[50];
char *blz[7]={"int","char","include","void","main","if","else"};
printf("请输入并且以#结束:");
ch=' ';
while(ch==' ') //跳过空格
{//printf("出现空格\n");
//printf(" ");
ch=getchar();

while(ch!=' ') //下面的while跳出后,输出连续的字符串
{
while(ch!=' ') //得到连续的字符串,遇到空格跳出
{
a[i]=ch;
ch=getchar();
i++;
if(ch=='#')
break;
}
//for(j=0;j<i;j++)
//printf("%c",a[j]);
blzpd(a); //调用函数blzpd(),判断是否是保留字
//printf("\n");
i=0;
if(ch=='#')
break;
}
}
// retrun(0);
printf("运行没问题\n");
}
char blzpd(char *b)
{ int m;
char *blz[7]={"int","char","include","void","main","if","else"};
for(m=0;m<7;m++)
if(strcmp(b,blz[m])==0)
{printf("保留字%s 编码01\n",b);
break;
}
else
//continue;
printf("不同");
}

[解决办法]

看了代码应该没问题的,不过要有点修改

a[i]=0;//增加这个代码,否则a会没有正确的结束符.比如include之后如果检测到int,则此处变成intlude
blzpd(a); //调用函数blzpd(),判断是否是保留字

[解决办法]

探讨
ch=' ';
while(ch==' ') //跳过空格
{//printf("出现空格\n");
//printf(" ");
ch=getchar();

while(ch!=' ') //下面的while跳出后,输出连续的字符串
{
while(ch!=' ') //得到连续的字符串,遇到空格跳出
{
a[i]=ch;
ch=getchar();
i++;
if(ch=='#')
break;
}
//for(j=0;j<i;j++)
//printf("%c",a[j]);
blzpd(a); //调用函数blzpd(),判断是否是保留字
//printf("\n");
i=0;
if(ch=='#')
break;
}
}

读书人网 >C语言

热点推荐