输入字符串后换行后无法停止输入

7-1 简单词法分析

img


#include 
#include 
int main() 
{
    //DFA数组/矩阵 
    int DFA[4][4]={1,0,-1,-1,-1,3,1,2,1,-1,-1,-1,-1,-1,-1,-1};
    //输入串 
    char str[50];
    gets(str);
    //状态,也是DFA的行标 
    int state=0;
    //DFA矩阵的列标
    int j=0;
    //正在检查的字符
    int i=0;
    //循环控制变量
    int k=0; 
    int m=0;
    //统计字符串被划分为了多少个词 
    int p=0;
    while(i<(int)strlen(str))//如果输入串没有结束,strlen(str)返回输入串str的长度 
    {
        //由正在检查的字符确定列标
        if(str[i]=='a')
          j=0;
        else if(str[i]=='b')
          j=1;
        else if(str[i]=='c')
          j=2;
        else if(str[i]=='d')
          j=3;
        else//输入错误 
        {
          printf("输入错误\n");
          break;    
        }
        //跳转后的状态,即下一个状态
        state=DFA[state] [j];
        //每进行一次状态转换,意味着向下走了一个字母,记录向下走的数字长度
        m++;
        if(state==3)
        {
            
            for(k;k<=m;k++) 
            {
                printf("%c",str[k]); 
            }
            printf("\n");
            p++; 
        }
        //当state=-1时,不能识别或接受
        if(state==-1) 
        {
           printf("DFA不接受这个字符串\n"); 
        }
    }
    printf("字符串共被划分为%d个词",p);
    return 0;
}

img

while(i<(int)strlen(str))
这个循环里缺少i++,导致死循环

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632