以下是一个基于等待动作的状态机编程模式的状态命名示例,假设我们正在编写一个银行取款机的程序:
复制
enum State {
START,
WAIT_FOR_CARD,
CARD_INSERTED,
WAIT_FOR_PIN,
PIN_ENTERED,
WAIT_FOR_AMOUNT,
AMOUNT_ENTERED,
DISPENSE_CASH,
ERROR
};
int main() {
enum State current_state = START;
while (1) {
switch (current_state) {
case START:
printf(“Welcome to the bank!\n”);
current_state = WAIT_FOR_CARD;
break;
case WAIT_FOR_CARD:
printf("Please insert your card.\n");
// Wait for card to be inserted
if (card_inserted) {
current_state = CARD_INSERTED;
}
break;
case CARD_INSERTED:
printf("Card inserted.\n");
current_state = WAIT_FOR_PIN;
break;
case WAIT_FOR_PIN:
printf("Please enter your PIN.\n");
// Wait for PIN to be entered
if (pin_entered) {
current_state = PIN_ENTERED;
}
break;
case PIN_ENTERED:
printf("PIN entered.\n");
current_state = WAIT_FOR_AMOUNT;
break;
case WAIT_FOR_AMOUNT:
printf("Please enter the amount you wish to withdraw.\n");
// Wait for amount to be entered
if (amount_entered) {
current_state = AMOUNT_ENTERED;
}
break;
case AMOUNT_ENTERED:
printf("$%d has been withdrawn from your account.\n", amount);
current_state = DISPENSE_CASH;
break;
case DISPENSE_CASH:
printf("Please take your cash.\n");
// Dispense cash
if (cash_dispensed) {
current_state = START;
}
break;
case ERROR:
printf("An error has occurred. Please try again.\n");
current_state = START;
break;
}
}
return 0;
}
在这个示例中,我们定义了不同的状态,并在每个状态中执行需要的操作。每个状态都有一个相关联的动作,例如等待卡插入、等待 PIN 码输入、等待金额输入等等。根据输入的不同情况,我们将程序的当前状态移动到下一个状态。如果出现错误,我们将程序状态设置为 ERROR 状态,并返回到 START 状态以重新开始程序。