types/grades-7-13-ok.c - Et program som både bruger enumeration typer 7-trins og 13-skala karakterer - Nu lovlig, men med tunge navne. | Lektion 8 - slide 9 : 29 Program 4 |
/* Now OK - but tedious */ #include <stdio.h> #include <stdlib.h> enum grade_simple {not_passed, passed}; enum grade_7 {g7_minus_tre = -3, g7_nul_nul = 0, g7_nul_to = 2, g7_fire = 4, g7_syv = 7, g7_ti = 10, g7_tolv = 12}; enum grade_13 {g13_nul_nul = 0, g13_nul_tre = 3, g13_fem = 5, g13_seks, g13_syv, g13_otte, g13_ni, g13_ti, g13_elleve, g13_tretten = 13}; enum grade_7 convert_grade_13_to_grade_7 (enum grade_13 g13){ enum grade_7 g7; switch(g13){ case g13_nul_nul: g7 = g7_minus_tre; break; case g13_nul_tre: g7 = g7_nul_nul; break; case g13_fem: g7 = g7_nul_nul; break; case g13_seks: g7 = g7_nul_to; break; case g13_syv: g7 = g7_fire; break; case g13_otte: g7 = g7_syv; break; case g13_ni: g7 = g7_syv; break; case g13_ti: g7 = g7_ti; break; case g13_elleve: g7 = g7_tolv; break; case g13_tretten: g7 = g7_tolv; break; default: printf("Illegal grade in grade_13 encountered. Bye."); exit(EXIT_FAILURE); } return g7; } void prnt_grade_7(enum grade_7 g){ switch (g) { case g7_minus_tre: printf("minus-tre"); break; case g7_nul_nul: printf("nul-nul"); break; case g7_nul_to: printf("nul-to"); break; case g7_fire: printf("fire"); break; case g7_syv: printf("syv"); break; case g7_ti: printf("ti"); break; case g7_tolv: printf("tolv"); break; default: printf("Illegal grade in grade_7 encountered. Bye."); exit(EXIT_FAILURE); } } int main(void){ int grade_number; printf("Enter '13 skala' grade: "); scanf(" %d", &grade_number); printf("7-step grade is: "); prnt_grade_7( convert_grade_13_to_grade_7((enum grade_13)grade_number)); /* Notice the type cast */ printf("\n"); return 0; }