Skip to content

Instantly share code, notes, and snippets.

@ochaochaocha3
Created January 19, 2015 09:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ochaochaocha3/d01cd3332923d07a8ac9 to your computer and use it in GitHub Desktop.
Save ochaochaocha3/d01cd3332923d07a8ac9 to your computer and use it in GitHub Desktop.
状態遷移の例
// 状態遷移の例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum state { STATE_A, STATE_B, STATE_C };
// 状態 A〜C の処理
void a(void);
void b(void);
void c(void);
enum state s = STATE_A; // 状態
char buffer[256]; // scanf で入れる配列
int main(void) {
while (1) {
switch (s) {
case STATE_A:
a();
break;
case STATE_B:
b();
break;
case STATE_C:
c();
break;
default:
break;
}
}
return 0;
}
void a(void) {
printf("[状態 A] B: 状態 B に行く, X: 終わる > ");
scanf("%s", buffer);
switch (buffer[0]) {
case 'B':
s = STATE_B;
break;
case 'X':
exit(0);
default:
break;
}
}
void b(void) {
printf("[状態 B] A: 状態 A に戻る, C: 状態 C に行く, X: 終わる > ");
scanf("%s", buffer);
switch (buffer[0]) {
case 'A':
s = STATE_A;
break;
case 'C':
s = STATE_C;
break;
case 'X':
exit(0);
default:
break;
}
}
void c(void) {
printf("[状態 C] A: 状態 A に行く > ");
scanf("%s", buffer);
if (buffer[0] == 'A') {
s = STATE_A;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment