有人可以解释这个状态机程序如何工作吗?

时间:2018-12-02 08:17:38

标签: c

我不了解该程序的工作方式;有人可以解释吗?
我知道它与状态机连接,但是我不了解状态机的工作原理。

void abba();

int main()
{
    printf("Enter 10 characters, a or b.\n");
    abba();

    return 0;
}

void abba() 
{
    int x = 0;
    char  a;

    while ((scanf_s("%c", &a) == 1) && (a == 'a' || a == 'b')) {
        switch (x) {
        case 0:
            if (a == 'a')
                x = 1;
            break;
        case 1:
            if (a == 'b')
                x = 2;
            break;
        case 2:
            if (a == 'b')
                x = 3;
            else
                x = 1;
            break;
        case 3:
            if (a == 'b')
                x = 0;
            else {
                puts("abba is found !");
                x = 4;
            }
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:4)

这是代码的状态机。 enter image description here

如您所见,有4种状态。

每个州的说明

  
      
  1. 状态0-如果收到char a,则移至状态1,否则您将保持状态0。
  2.   
  3. 状态1 -如果收到char b,则进入状态2,否则您将保持状态1。
  4.   
  5. 状态2 -如果您收到char b,则进入状态3,否则从那里再次回到状态1,则需要阅读bb才能到达状态   3。
  6.   
  7. 状态3 -如果您收到char a,则阅读完整的abba,否则您需要从头开始阅读输入内容。
  8.