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!
Toimii se chareilla. Char-taulukoilla toki ei.
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).
Eipä minulla kyl toimi...
... char Choose; ... switch(Choose) { case Exit: return 0; } ...
Tulee error: Exit undeclared
No mitä sää tossa nyt haet? Virhehän tarkoittaa, ettet ole määritellyt Exit-muuttujaa.
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
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 }
No eli ainut vaihtoehto on käyttää iffiä?
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... */
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?
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.
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ä.
Ä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?
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.
http://www.codeguru.com/Cpp/Cpp/string/comments.
Tuosta taitaa löytyä vinkkiä oikeaan suuntaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.