previous next Up Title Contents Index

Esimerkki 2

Funktiopointtereita voidaan hyödyntää valikkopohjaisissa käyttöliittymissä.

Seuraavassa ohjelmassa on päävalikko, josta käyttäjä voi valita yhden neljästä vaihtoehdosta.
Kukin vaihtoehto johtaa tietyn funktion suorittamiseen. Funktioihin siirrytään osoitetaulukon avulla.

    #include <stdio.h>
    #include <conio.h>
    /* FUNKTIOIDEN PROTOTYYPIT *********/
    int valikko (void);
    void summa(void);
    void erotus(void);
    void tulo(void);
    void lopetus(void);
    /* FUNKTIOIDEN OSOITETAULUKKO */
    void (*funktiot[4])(void)={lopetus,summa,erotus,tulo};
    /* PÄÄOHJELMA ***********************/
    void main (void)
    {
        int valinta;
        do{
            valinta = valikko();
            (*(funktiot[valinta]))();
        }while (valinta != 0);
    }
    /* FUNKTIOIDEN MÄÄRITTELYT**********/
    int valikko (void)
    {
        int val;
        do
        {
            clrscr();
            printf ("\n ---- MENU ---- \n\n");
            printf (" Valitse yksi vaihtoehdoista\n\n");
            printf (" (1) Summa\n");
            printf (" (2) Erotus\n");
            printf (" (3) Tulo\n");
            printf (" (0) Lopetus\n");
            printf ("\n\n");
            printf (" Anna valintasi (numero) : ");
            val = getche()-'0';
            if (val < 0 || val > 3)
            {
                val=0;
            }
        }while (val!=0);
        return val;
    }
    void summa(void)
    {
        int luku1;
        int luku2;
        clrscr();
        printf ("Anna kaksi kokonaislukua :");
        scanf ("%d %d",&luku1,&luku2);
        printf ("Lukujen summa on %d",luku1+luku2);
    }

Muiden funktioiden toteutukset liitetään ohjelmaan vastaavalla tavalla kuin summa()-funktio.

previous next Up Title Contents Index