123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* enum.c -- uses enumerated values */
- #include <stdio.h>
- #include <string.h> // for strcmp(), strchr()
- #include <stdbool.h> // C99 feature
- char * s_gets(char * st, int n);
- enum spectrum {red, orange, yellow, green, blue, violet};
- const char * colors[] = {"red", "orange", "yellow",
- "green", "blue", "violet"};
- #define LEN 30
- int main(void)
- {
- char choice[LEN];
- enum spectrum color;
- bool color_is_found = false;
-
- puts("Enter a color (empty line to quit):");
- while (s_gets(choice, LEN) != NULL && choice[0] != '\0')
- {
- for (color = red; color <= violet; color++)
- {
- if (strcmp(choice, colors[color]) == 0)
- {
- color_is_found = true;
- break;
- }
- }
- if (color_is_found)
- switch(color)
- {
- case red : puts("Roses are red.");
- break;
- case orange : puts("Poppies are orange.");
- break;
- case yellow : puts("Sunflowers are yellow.");
- break;
- case green : puts("Grass is green.");
- break;
- case blue : puts("Bluebells are blue.");
- break;
- case violet : puts("Violets are violet.");
- break;
- }
- else
- printf("I don't know about the color %s.\n", choice);
- color_is_found = false;
- puts("Next color, please (empty line to quit):");
- }
- puts("Goodbye!");
-
- return 0;
- }
- char * s_gets(char * st, int n)
- {
- char * ret_val;
- char * find;
-
- ret_val = fgets(st, n, stdin);
- if (ret_val)
- {
- find = strchr(st, '\n'); // look for newline
- if (find) // if the address is not NULL,
- *find = '\0'; // place a null character there
- else
- while (getchar() != '\n')
- continue; // dispose of rest of line
- }
- return ret_val;
- }
|