Okei... The Tietämätön täällä taas...
Haluaisin tietää kaiken mahdollisen 'case'n käytöstä C/C++:lla; millaisessa tilanteessa, miten ja kaikki muu hyödyllinen/kätevä...
Yritin selailla Putkaa hiukan mutta en oikein löytänyt mitään kunnollista. Löysin muutamia esimerkkejä joissa oli jotain tyyliin
switch (muuttuja){ case 1: kooooooooooodia pari riviä case 2: lisää koodia case 3: jne...}
Onko mahdollista saada se tunnistamaan merkkijono (esim. sana)?
Aluksi tein kaiken if:llä mutta se venähti HIEMAN pitkäksi ja kaverini ehdotti case:a (...omalla omituisella tavallaan...) mutta en saanut häneltä mitään selitystä sen käytöstä. Lisäksi kun katsoin tuolta C-oppaasta josko siellä olisi ollut jotain mainintaa niin en löytänyt mitään hyödyllistä.
No siis rakennehan on seuraava:
switch(muuttuja) { case tapaus: tapaus(); break; case tapausKaksi: tapausKaksi(); break; default: break; }
Muuttuja voi olla joko kokonaisluku(int) tai merkki(char).
Itse en rakennetta juuri tykkää käyttää, mutta kai sitä on tarkoitus käyttää esim. tapauksissa tyyliin:
int main() { int valinta; scanf("%i", &valinta); switch(valinta) { case 1: printf("Valitsit ykkösen\n"); break; case 2: printf("Valitsit kakkosen\n"); break; default: printf("Valitsit jonkun muun kuin ykkösen tai kakkosen\n"); break; } return 0; }
Default-kohta suoritetaan jos määriteltyä tapausta ei löydy.
Duthoron kirjoitti:
Haluaisin tietää kaiken mahdollisen 'case'n käytöstä C/C++:lla; millaisessa tilanteessa, miten ja kaikki muu hyödyllinen/kätevä...
Switch-case -rakenne on erittäin kätevä peleissä, esimerkiksi nuolinäppäimin toteutetussa henkilön ohjaamisessa. If-else -rakenteen korvaajana se on joskus hyvä (jos case sopii tarkoitukseen, se ajaa paremmin asian kuin if) mutta aina sitä ei voi käyttää, koska if:n parametrit voivat olla tarkemmat, tyyliin (JOS tätä JA tuota MUTTA ei sitä JOS ei mitään NIIN SITTEN).
switch
ia voi myös "väärinkäyttää" jättämällä välillä break
in pois, jolloin ohjelman suoritus jatkuu seuraavasta case
sta. Esim:
// *** autopeli enum { KAASU, JARRU, ILOKAASU };
switch(valinta) { case ILOKAASU: auton_nopeus++; case KAASU: auton_nopeus++; break; case JARRU: auton_nopeus--; break; default: break; }
Pascalissa voisit kirjoittaa:
case arvo of 0..9: writeln('Alle 10'); else: writeln('Yli 10'); end;
Sama C:llä
switch (arvo) { case 0: case 1: case 2: . . . case 9: printf("Alle 10\n"); break; default: printf("Yli 10\n"); break; }
Merkkijonoja switch-rakenteella ei siis voi tarkastella, niihin tarvitsee iffiä. Tietenkin voi tehdä jonkinlaisen purukumitoteutuksen:
int sanoja = 2; char *sanat[] = { "Jee", "Moi" }; // Monesko sana on? for (i = 0; i < sanoja; ++i) { if (strcmp(sanat[i], sana) == 0) { break; } } switch (i) { case 0: /* "Jee" */ printf("No jee itsellesi vain!\n"); break; case 1: /* "Moi" */ printf("Tervehdys, toveri!"); break; default: printf("Sanaa ei ole.\n"); }
Kiitoksia.... Tuossa oli kyllä melko tyhjentävästi se mitä hain. Ilmoittelen taas jos keksin muuta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.