Česky
Kamil Dudka

Tiny programs (C, C++, C#, ...)

File detail

Name:Downloadenumdny.c [Download]
Location: tiny > IJC > du1
Size:1.6 KB
Last modification:2007-08-29 17:44

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;
}