/********************************/
/* soubor PTR_FN01.C */
/* pole ukazatelu na funkce */
/********************************/
#include <stdio.h>
#include <process.h>
typedef void (*menu_fcn) (void); /* definice typu */
menu_fcn command[3]; /* pole tri ukazatelu na funkce */
void fn_1(void) /* definice prvni funkce */
/**************/
{
puts("funkce cislo 1\n"); /*puts() je kratsi, nez printf()*/
} /* void fn_1(void) */
void fn_2(void) /* definice druhe funkce */
/**************/
{
puts("funkce cislo 2\n");
} /* void fn_2(void) */
void fn_3(void) /* definice treti funkce */
/**************/
{
puts("funkce cislo 3\nKONEC\n");
exit(0); /* ukonceni chodu programu */
} /* void fn_3(void) */
void assign_fn(void) /* prirazeni ukazatelu na fce */
/******************/ /* do pole ukazatelu */
{
command[0] = fn_1;
command[1] = fn_2;
command[2] = fn_3;
} /* void assign_fn(void) */
void menu(void) /* funkce s nabidkou */
/*************/
{
int choice;
do {
puts("1\tpolozka\n2\tpolozka\n3\tukonceni\n");
putchar('>');
scanf("%d", &choice);
if (choice >= 1 && choice <= 3)
command[choice - 1]();
/* ^ volani funkce pomoci pole ukazatelu, () jsou nutne */
} while (1); /* nekonecny cyklus */
} /* void menu(void) */
int main(void) /* hlavni funkce programu */
/************/
{
assign_fn(); /* volani spravne inicializace pole ukazatelu */
menu(); /* volani nabidky, obsahuje i volbu ukonceni */
return 0; /* tento radek je vlastne zbytecny, program */
/* ukonci exit() ve treti funkci - fn_3 */
} /* int main(void) */