Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

switch

...

...case valintarakenne

...

  • Switch...case -rakenteessa on testattavana yksi lauseke, jonka arvon perusteella haaraudutaan johonkin case-haaraan.
  • case-haara voi sisältää useita lauseita, jotka suoritetaan peräkkäin, kunnes törmätään break-lauseeseen, joka ohjaa kontrollin pois switch-rakenteesta.

Switch-case valintarakenteen muoto:

Code Block

switch (lauseke) {
    case arvo_1 : lauseita; break;
    case arvo_2 : lauseita; break;
    ...
    case arvo_n : lauseita; break;
    default: lauseita; break;
}
  • Switch...case -rakenteessa voi olla case-vaihtoehtoja 127 kappaletta. Lisäksi siinä voi olla default-osa, johon tullaan ellei yksikään case-vaihtoehdoista vastaa lausekkeen arvoa. Jos default-osa puuttuu eikä mikään tapausvakio vastaa lausekkeen arvoa, ohjelman suoritus jatkuu switch-rakennetta seuraavasta lauseesta.
  • Tapausvakiot ovat nimensä mukaisesti vakioita. Niiden arvot tulee näin ollen voida ratkaista jo ohjelman käännösvaiheessa. Tämä tarkoittaa, että tapausvakioina ei voi olla muuttujia. Vakiolausekkeiden arvojen on lisäksi oltava kokonaislukutyyppisiä (char, int, long).
  • Break-lauseet, joihin yksittäiset case-haarat päättyvät, eivät ole pakollisia. Mikäli ohjelmassa on haarauduttu case-osaan, jonka lopusta puuttuu break-lause, ohjelman kontrolli "valuu" seuraavaan case-osaan. Vasta, kun törmätään seuraavaan break-lauseeseen, kontrolli siirtyy pois switch-rakenteesta. Joissain tilanteissa tämä voi olla jopa toivottava toimintamalli.

Esimerkki

Koodi joka tulostaa valikon, ja tottelee käyttäjän antamia käskyjä sen mukaisesti.

Code Block

void Valikko();  // tulostaa käyttäjälle ohjeet
void Funktio1();
void Funktio2();

void main()
{
    unsigned int Valitsin = 0;
    while (1) {
        valikko();
        Valitsin=getch();
        switch (Valitsin) {
            case '0' : return;
            case '1' : Funktio1(); break;
            case '2' : Funktio2(); break;
            default  : break;
        }
    }
}

void Funktio1()
{
    system("cls"); // tyhjentää ruudun
    printf("\n Funktio 1 PAINA JOTAIN");
    getch();
}

void Funktio2()
{
    system("cls"); // tyhjentää ruudun
    printf("\n Funktio 2 PAINA JOTAIN");
    getch();
}

void valikko()
{
    system("cls"); // tyhjentää ruudun
    printf("\n0........Lopetus");

...


    printf("\n1........Funktio 1");

...


    printf("\n2........Funktio 2");

...


}