Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Switch ei toimi chareilla

Sivun loppuun

Tumpelo [09.12.2005 21:37:43]

#

Niin mulla on onkkelma nyt vaihteeksi semmonen että switch-casen muuttujan arvona ei ilmeisesti saa olla kuin luku, mutta minun pitäisi saada siihen luvun tilalle merkkejä... Help!

Blaze [09.12.2005 21:47:59]

#

Toimii se chareilla. Char-taulukoilla toki ei.

Metabolix [09.12.2005 21:51:49]

#

Kuten ei char-taulukon vertailu ==-operaatiollakaan. Jos sitä kaivataan, if-else-rakenne strcmp-funktiolla höystettynä on aika kova sana (jos verailukohteita ei ole aivan mieletöntä määrää eli satoja; silloin tulevat jo tietorakenteet ja algoritmit tarpeeseen).

Tumpelo [09.12.2005 21:59:20]

#

Eipä minulla kyl toimi...

...

char Choose;

...

switch(Choose)
        {
                      case Exit: return 0;
        }

...

Tulee error: Exit undeclared

sooda [09.12.2005 22:01:59]

#

No mitä sää tossa nyt haet? Virhehän tarkoittaa, ettet ole määritellyt Exit-muuttujaa.

Tumpelo [09.12.2005 22:15:20]

#

No tuossahan se määritellään, ja sen arvo pyydetään tossa välissä käyttäjältä...

Eiku joo, " " merkit uupu. :D Mut silti tulee joku error... Case label does not reduce to an integer constant

sooda [09.12.2005 22:21:03]

#

Ai meinaat että ton pitäis olla case "Exit"? char-tyyppiseen muuttujaan saa vain yhden merkin, jos sitä tarkoitit...

Esimerkkinä

char foo;
/* ... */
switch (foo) {
    case 'a': // sallittu: heitomerkeissä oleva yksi merkki on oikeastaan luku: merkin ascii-arvo...
        /* ... */
        break;
    case "a": // lainausmerkkien välissä oleva on char * -tyyppinen, ei kelpaa
}

Tumpelo [09.12.2005 22:24:11]

#

No eli ainut vaihtoehto on käyttää iffiä?

sooda [09.12.2005 22:28:42]

#

Joo. Vielä pieni esimerkki varmuuden vuoksi

char valinta[(tarpeeks)];
/* ja hae valinta jossain... */
if (strcmp(valinta, "Exit") == 0) {
    /* tee mitä tehdään ku poistutaan */
} else if (strcmp(valinta, "Poks") == 0) {
    printf("enkä losahda\n");
}
/* jne... */

Tumpelo [09.12.2005 22:38:02]

#

Kiitos, tuo auttoi! Nyt viimeinkin pääsen koodailemaan hiki päässä, toivon mukaan ilman onkkelmia. :D

Tulipa vaan mieleen että miksi ihmeessä c++:lla on nuo merkkijonot toteutettu niin hankalasti... Miksei samalla tavalla kuin vaikkapa basiceissa?

sooda [09.12.2005 22:41:05]

#

C++:ssa on ihan kivat luokat merkkijonoihin, joita uskoisin voivan käytettävän helpomminki operaattorien ylikuormituksen avulla. Char-taulukot on C:n merkkijonoja. C:ssä ei ole luokkia.

Heikki [10.12.2005 10:17:30]

#

Eli C++:n merkkijonoilla (std::string) tuo hoituisi näin:

#include <string>
using std::string

int main() {
 string valinta;     // Ei tarvitse huoehtia pituudesta
 // --
 if (valinta=="Exit")
  cout << "Sammun\n";
 else if (valinta=="Poks")
  cout << "Poks poks\n";
}

Std::stringejä voi myös käsitellä kätevästi, esim. string+="teksti" liittää perään tekstiä.

Tumpelo [11.12.2005 19:35:11]

#

Äh, olenpa pöljä. Mulla on kokoajan ollu ohjelman alussa tuo "using namespace std;" joten oisin voinu käyttää stringejä (:D) mutta en käyttänyt. Joskus pistää miettimään että eikö näillä peeloiluilla ole loppua...

Edit: Tosin eipä se tuossa switch-case ongelmassa auta. Kyrpii kun ei voi käyttää stringejä tuossa... Onko mitään korvaavaa rakennetta joka olisi kuitenkin parempi kuin if?

kooderi [11.12.2005 20:20:27]

#

Mitä vikaa if -rakenteessa on? Ja kyllä niitä stringejä voi käyttää ihan ilman namespacen tai using.. mainintaakin. Tällöin esittely tietenkin muodossa std::string.

WinC [11.12.2005 20:24:27]

#

http://www.codeguru.com/Cpp/Cpp/string/comments.php/c5637/?thread=61766
Tuosta taitaa löytyä vinkkiä oikeaan suuntaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta