if (sukupuoli == "m" or "M")
cout << "Olet mies parhaassa iässä!";
Elikkäs tässä olisi tämmöinen ongelma jossa ehto toteutuu jos muuttujassa on tallennettu m tai M kirjain. Miten vertailu suoritettaan, kun kääntäjä sanoo:
Virheellinen vertailuoperaattorin käyttö
* Tarkista että operaattorin operandit ovat samantyyppiset. Ts. et voi esimerkiksi verrata merkkijonoa ja kokonaislukua keskenään.
* Jos käytät vertailussa osoittimia, tarkista &- ja *-operaattorien käyttö.
yksittäistä kirjainta voi verrata näin
if (sukupuoli == 'm' || sukupuoli == 'M' )
Tuon ||:n tilalle voi tosin laittaa sen or:in, sama tulos, itse pidän jälkimmäisestä, selkeämpi :)
Ja vielä tarkennuksena se, että käsitykseni mukaan tuo sinun (tovarits) esimerkissä verrataan tuota sukupuoli-muuttujaa merkkijonoon(" "), joten se pitäsi myös määrittää merkkijonona (char sukupuoli[pituus];).
Lahhan esimerkissä verrataan merkkiin (' '), joten silloin määritys olisi näin: char sukupuoli;
Taidatpa tehdä viopen tehtäviä? :D Muistelin että siinä piti tulostaa juuri tuollatavalla paitsi että verratiin vielä ikää...
Jos monta kirjainta haluat verrata keskenään niin
string merkki; merkki = "moikka"; if (merkki.strcmp("moikka")==0) { cout << "no moi moi\n"; } else { cout << ":<\n"; }
(Mod. edit: kooditagit.)
1: #include <iostream> 2: #include <string> 3: 4: using namespace std; 5: 6: int main() 7: { 8: char sukupuoli; 9: int ika = 0; 10: 11: cout << "Oletko mies vai nainen (m/n)"; 12: cin.get(sukupuoli); 13: 14: switch(ika) 15: { 16: 17: case ika <55: 18: { 19: if (sukupuoli == "m" || sukupuoli == "M") 20: cout << "Olet mies parhaassa iässä!"; 21: break; 22: else if (sukupuoli "n" || sukupuoli "N") 23: cout << "Olet neito kauneimmillaan!"; 24: break; 25: } 26: 27: case ika < 100: 28: { 29: else if (sukupuoli == "m" || sukupuoli == "M") 30: cout << "Olet viisas mies!"; 31: break; 32: else if (sukupuoli == "n" || sukupuoli == "N") 33: cout << "Olet nuori ikäiseksesi!"; 34: break; 35: } 36: 37: else 38: cout << "Ohjelmassa tapahtunut virhe!"; 39: 40: } 41: }
Tässä se koko roska on nyt kokonaisuudessaan silti se valittaa sitä Virheellinen vertailuoperaattorin käyttö hommaa.
(Mod. edit: kooditagit)
1) Switchiä ei voi käyttää noin (esim. "< 55"), laita iffeiksi nuo caset.
2) täh, ihan totaalisen oudosti elseiffejä casejen sisällä. Kertaa ne.
3) täh, ethän kysy ikää missään vaiheessa käyttäjältä o_O?
4) "m" ja 'm' ovat eri asiat; char-muuttujaan menee luku, 'm' on m-kirjaimen merkkikoodi selkokielellä ja "m" on merkkijono, ihan eri asia.
Eihän tossa linkissä kerrota mitää tuosta else iffejen sijoittamisesta caseen?
Tuo iän kysymisen puuttuminen johtuu siitä, että suutuin koko pömpälle ja pyyhin. Sitten unohtui laittaa uudestaan. Tyhmä minä.
Ei siinä ollutkaan casesta kysymys. Elsellä ei ole casen kanssa mitään tekemistä.
Muuta tuo toimimaton switch-kyhäelmäsi iffeiksi. Mikään tuossa tehtävässä ei edellytä switchin käyttöä. (En muista, mitä ohje sanoo, mutta muistan tehneeni tehtävän ilman yhtäkään iffiä tai switchiä pelkillä ?:-rakenteilla. :P) Tämä on siis taas kerran VIOPEn harjoitustehtävä, tiedoksi kaikille. Kurssien työt olisi suotavaa tehdä itse.
Muistaakseni itse viopessa (osasin kyllä kielen jo ennen sitä) tein iffeillä ja elseillä tuon paitsi että siinä oli vertailu joka vertas onko kirjain "n" vai "m" (kirjainkoolla ei muuten ole väliä viope käyttää ainoastaan lowercase) ja sitten katso iän... En kyllä ymmärrä miten olet voinut päästä kolmannen luvun kolmannen tehtävän läpi kun tälläinenki jo tökkii... :o
Aihe on jo aika vanha, joten et voi enää vastata siihen.