// Encoding: ISO-8859-2 // enumdny.c // Řešení IJC-DU1, příklad a) // Autor: Jan Kaláb, FIT // Přeloženo gcc 4.1.1 #include "error.h" #include "enumdny.h" #include <stdio.h> #include <ctype.h> #include <string.h> const char *DayShort [] = {"", "po", "út", "st", "čt", "pá", "so", "ne"}; const char *DayShortASCII [] = {"", "po", "ut", "st", "ct", "pa", "so", "ne"}; const char *DayLong [] = {"", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota", "neděle"}; const char *DayLongASCII [] = {"", "pondeli", "utery", "streda", "ctvrtek", "patek", "sobota", "nedele"}; void JeToDen (enum dny den) { if (den < Po || den > Ne) Error("PrintDay: hodnota %d mimo rozsah\n", den); } void PrintDayShortASCII (enum dny den) { JeToDen(den); printf ("%c%s", toupper(DayShortASCII[den][0]), DayShortASCII[den]+1); } void PrintDayLongASCII (enum dny den) { JeToDen(den); printf ("%c%s", toupper(DayLongASCII[den][0]), DayLongASCII[den]+1); } void PrintDayShort(enum dny den) { JeToDen(den); printf("%c%s", toupper(DayShort[den][0]), DayShort[den]+1); } void PrintDayLong(enum dny den) { JeToDen(den); printf("%c%s", toupper(DayLong[den][0]), DayLong[den]+1); } enum dny ReadDay (void) { // printf("ReadDay\n"); char slovo[100]; //100 znaku by mohlo stacit int i=0; int znak; while ((znak=getchar())!=EOF) { if (znak==EOF) return 0; if (!isalpha(znak)) continue; //zahodime blbosti if (i < sizeof(slovo)-1) slovo[i++] = tolower(znak); } slovo[i++] = '\0'; //ukonceni retezce // printf ("Precetl jsem: %s\n",slovo); for (enum dny i = Po; i <= Ne; i++) { if (strcmp(slovo, DayShortASCII[i])==0) return i; if (strcmp(slovo, DayShort[i])==0) return i; if (strcmp(slovo, DayLongASCII[i])==0) return i; if (strcmp(slovo, DayLong[i])==0) return i; } return 0; }
// enumdny.h // Řešení IJC-DU1, příklad a) // Autor: Jan Kaláb, FIT // Přeloženo gcc 4.1.1 enum dny {Po=1, Ut, St, Ct, Pa, So, Ne}; void PrintDayShort (enum dny den); void PrintDayShortASCII (enum dny den); void PrintDayLong (enum dny den); void PrintDayLongASCII (enum dny den); enum dny ReadDay(void);
// enumtest.c // Řešení IJC-DU1, příklad a) // Autor: Jan Kaláb, FIT // Přeloženo gcc 4.1.1 #include "error.h" #include "enumdny.h" #include <stdio.h> #include <locale.h> int main(void) { /* test funkcí - NEMĚNIT!!! */ enum dny den; char *l = setlocale(LC_ALL,"cs_CZ"); if(l==NULL) Error("setlocale: Nelze nastavit českou lokalizaci\n"); den = ReadDay(); // čte Po, Pondělí, Pondeli, PONdeli, .... PrintDayShort(den); // tiskne Po printf("\n"); PrintDayShortASCII(den); // tiskne Po printf("\n"); PrintDayLong(den); // tiskne Pondělí printf("\n"); PrintDayLongASCII(den); // tiskne Pondeli printf("\n\n"); for( den = Po; den < 10; den++ ) { /* úmyslná chyba */ PrintDayShortASCII(den); printf("\n"); } return 0; }
// error.c // Řešení IJC-DU1, příklad a) // Autor: Jan Kaláb, FIT // Přeloženo gcc 4.1.1 #include "error.h" #include <stdio.h> #include <stdlib.h> #include <stdarg.h> void Error (const char *fmt, ...) { va_list parametry; va_start (parametry, fmt); fprintf (stderr, "CHYBA: "); vfprintf (stderr, fmt, parametry); fprintf (stderr, "\n"); va_end (parametry); exit (1); }
// error.h // Řešení IJC-DU1, příklad a) // Autor: Jan Kaláb, FIT // Přeloženo gcc 4.1.1 void Error (const char *fmt, ...);
CC = gcc CFLAGS = -O2 -std=c99 -pedantic -Wall PROGS = enumtest LOGIN = xkalab00 ARCHIVER = zip all: $(PROGS) enumtest: enumtest.o error.o enumdny.o enumdny.o: enumdny.c error.h enumdny.h enumtest.o: enumtest.c error.h enumdny.h error.o: error.c error.h clean: -rm -f *.o $(PROGS) pack: -$(ARCHIVER) $(LOGIN).zip *.c *.h Makefile