#include #include #define INPUTLEN 5 /* This program asks the user for one of three actions: push, pull or turn. It then does those actions and spits out a result in degrees, of where the arrows on three concentric circles are pointing. North is 0 degrees; East is 90 degrees, etc. */ /* function prototypes */ void push(int *outer, int *inner); void pull(int *outer, int *middle); void turn(int *outer, int *middle); int smallnums(int degrees); int main(int argc, char *argv[]) { char input_s[INPUTLEN]; int outer = 0; int middle = 90; int inner = 270; while (1) { printf("\npush, pull or turn the angel? "); /* read in 4 characters from the keyboard */ if (strcasecmp(fgets(input_s, INPUTLEN, stdin), "\n")==0) { fgets(input_s, INPUTLEN, stdin); } printf("\nYou inputted: %s\n", input_s); /* figure out what the user wants to do, and do it */ if (strcasecmp("push", input_s)==0) { push(&outer, &inner); } else if (strcasecmp("pull", input_s)==0) { pull(&outer, &middle); } else if (strcasecmp("turn", input_s)==0) { turn(&outer, &middle); } /* print the result */ printf("\nOuter: %i | Middle: %i | Inner: %i\n", outer, middle, inner); printf("\n-------------------------------\n"); } return 0; } void push(int *outer, int *inner) { printf("\nIn push(); outer is %i, inner is %i\n", *outer, *inner); *inner = *inner + 90; *outer = *outer - 90; /* let's keep the numbers in the smaller degrees */ *inner = smallnums(*inner); *outer = smallnums(*outer); return; } void pull(int *outer, int *middle) { printf("\nIn pull(); outer is %i, middle is %i\n", *outer, *middle); *middle = *middle - 180; *outer = *outer + 90; /* smaller degrees! */ *middle = smallnums(*middle); *outer = smallnums(*outer); return; } void turn(int *outer, int *middle) { printf("\nIn turn(); outer is %i, middle is %i\n", *outer, *middle); *outer = *outer + 180; *middle = *middle - 90; /* smaller degrees */ *outer = smallnums(*outer); *middle = smallnums(*middle); return; } int smallnums(int degrees) { if (degrees >= 360 || degrees <= -360) { degrees = degrees / 360; } if (degrees == 1 || degrees == -1) { degrees = 0; } return degrees; }