Tiny programs (C, C++, C#, ...)
File detail
Source code
/*
* Soubor: enumdny.c - modul pracujici s vyctovym typem dny
* Kamil Dudka, FIT, DU1, priklad a), 1.4.2005
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "enumdny.h" // Rozhrani modulu enumdny.c
#include "error.h" // Rozhrani modulu error.c
/*
* Staticke pole pro prevod hodnoty vyctoveho typu na retezec
*/
static const char nazvyDnu[][3] = {
[ChybnyDen] = "",
[Po] = "Po",
[Ut] = "Ut",
[St] = "St",
[Ct] = "Ct",
[Pa] = "Pa",
[So] = "So",
[Ne] = "Ne"
};
/*
* Posledni platna hodnota vyctoveho typu
*/
static const enum dny posledniDen = Ne;
void PrintDay (enum dny den) {
if (den>posledniDen)
// Je-li parametr mimo rozsah, vola se obsluha chyby
Error ("PrintDay: hodnota %d mimo rozsah\n", den);
// Tiskne nazev dne na stdout
printf ("%s", nazvyDnu[den]);
}
enum dny ReadDay (void) {
const unsigned nacistPismen=2; // Nactou se 2 pismena
unsigned int nacteno=0; // Aktualni pocet nactenych pismen
int znak; // Prave nacteny znak
char buffer [nacistPismen+1]; // Pole, do ktereho se ukladaji nactena pismena
// Cyklus preskoci vsechny bile znaky a nacte dve pismena ze stdin
while ( nacteno<nacistPismen && EOF!=( znak=getchar())) {
if (isspace (znak))
// Bily znak
continue;
else if (isalpha (znak)) {
// Pismeno
buffer [nacteno] = znak;
nacteno ++;
}
}
// Nacteny retezec se ukonci nulou
buffer [nacteno] = 0;
// Funkci strcmp() porovnavam nacteny retezec se vsemi prvky statickeho pole
for (unsigned int i=0; i<=posledniDen; i++)
if (0 == strcmp (buffer, nazvyDnu[i]))
return i;
// Neni-li nalezena shoda, vraci funkce hodnotu ChybnyDen
return ChybnyDen;
}