====== Domácí úkol č.1 ======
// 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
#include
#include
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
#include
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
#include
#include
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