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.