Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Miten muuttujaa voi verrata kirjaimien kanssa?

Sivun loppuun

tovarits [23.12.2006 13:47:13]

#

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ö.

Lahha [23.12.2006 13:56:14]

#

yksittäistä kirjainta voi verrata näin
if (sukupuoli == 'm' || sukupuoli == 'M' )

Kentti [23.12.2006 14:27:16]

#

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;

tesmu [23.12.2006 15:51:55]

#

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.)

tovarits [23.12.2006 16:02:33]

#

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)

sooda [23.12.2006 16:09:47]

#

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.

tovarits [23.12.2006 17:25:19]

#

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ä.

Metabolix [23.12.2006 17:29:21]

#

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.

tesmu [25.12.2006 19:22:15]

#

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


Sivun alkuun

Vastaus

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

Tietoa sivustosta