C++ olio-ohjelmointi

-Katariina-

Aloittelija kaipailisi vähän apua :) En onnistu lukemaan syötettä toimivasti.

Tehtävä:
Ohjelmassa luodaan olio nimeltään "olio", joka on luokan "KysyJaTulosta" ilmentymä. Sinun tehtäväsi on laatia luokka "KysyJaTulosta" ja laatia luokkaan metodi TeeHommasi(), joka ottaa vastaan muuttujan "merkkijono" sisältämän merkkijonon, tulostaa muuttujan sisällön, lukee käyttäjän antaman syötteen ja tulostaa tämän näytölle.

Palautuskenttään tulee kirjoittaa vain puuttuva luokka, alla olevaa koodia ei tarvitse kopioida. Valmiin ohjelman toiminnan näet esimerkkitulosteesta.

Vihje:
Käyttäjän antamassa syötteessä voi olla välilyöntejä, joten pelkkä cin >> merkkijono; ei riitä käyttäjän syötteen lukemiseen.


#include
#include
using namespace std;

// sinun koodisi tulee tähän

int main (void)
{
char merkkijono[] = "Anna merkkijono, jonka tulostan:";
KysyJaTulosta olio;
olio.TeeHommasi(merkkijono);
}

Esimerkkitulostus:

Anna merkkijono, jonka tulostan:esimerkkituloste
esimerkkituloste


---
Oman koodini alku:

class KysyJaTulosta
{
public:
string merkkijono;
void TeeHommasi(string merkkijono);
};

void KysyJaTulosta::TeeHommasi(string merkkijono)
{
/* Miten saan luettua syötteen? */
cout

15

986

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • auttoijamutkaistuika

      jonkun verran aikaa mutta muistuu mieleen, "cin" joka ottaa sisään, "console in".

      CIN se on se funktio vastakkainen joka lukee näppäimistöltä tietoa että sitä määräät että se lukee näppäimistöltä sitten tietoja.

      Voi muodostaa ongelman joissain öä-kirjaimissa, sinun pitäisi silloin vaihtaa 8-bittinen ASCII-koodin numero jokaisen ääkkösen kohdalla yksitelleen, jotta ne toimisivat oikein.

      Nämä on kyllä määritelty IBM ASCII:ssa 8-bittisessä määritelty aivan täysin.

      Voi mennä liian vaikeaksi jo tuollainen.

      Mutta se on "cin" standardi funktio mikä lukee näppäimistöltä.

      • -Katariina-

        Tehtävässä huomautettiinkin, että perus cin ei toimi tässä ("koska käyttäjän antamassa syötteessä voi olla välilyöntejä"). Jos toimisi, niin mitään ongelmaa ei olisikaan :)

        Kokeilin myös cin.get() ja cin.getline(), mutta en saanut niilläkään tätä toimimaan. Toisen avulla sain muistaakseni tulostettua ekan rivin, mutta seuraavasta rivistä vain ensimmäisen kirjaimen.


      • Opettajan ohje
        -Katariina- kirjoitti:

        Tehtävässä huomautettiinkin, että perus cin ei toimi tässä ("koska käyttäjän antamassa syötteessä voi olla välilyöntejä"). Jos toimisi, niin mitään ongelmaa ei olisikaan :)

        Kokeilin myös cin.get() ja cin.getline(), mutta en saanut niilläkään tätä toimimaan. Toisen avulla sain muistaakseni tulostettua ekan rivin, mutta seuraavasta rivistä vain ensimmäisen kirjaimen.

        Olet oikeilla jäljillä, lue lisää dokumenttia.


      • Windows_Guru

        Ä ja Ö -kirjainten ongelman korjaaminen:

        Ongelma johtuu siitä, että windowsissa graafiset ( GUI ) -sovellukset käyttävät oletuksena joko "ANSI" -merkkivalikoimaa (tarkemmin sanottuna Suomessa ja monessa muussakin Euroopan maassa sekä myös USA:ssa tämä tarkoittaa käytännössä Windows-1252 -merkkivalikoimaa), kun taas komentorivisovellukset käyttävät OEM ( = MS-DOS ) -merkkivalikoimaa, ja nämä kaksi merkkivalikoimaa molemmat sisältävät US-ASCII -merkkivalikoiman merkkikoodeilla 0..127. Sensijaan koodien 128..255 osalta (jolla alueella Ä ja Ö sijaitsevat) nämä kaksi merkkien koodaustapaa ovat täysin erilaiset.

        em. syystä Ä ja Ö näkyvät komentorivisovelluksissa väärin, jollei asiaa korjata.

        Microsoft tarjoaa onglemiin ratkaisuksi nämä 2 windows API -kutsua:

        CharToOemBuff function
        http://msdn.microsoft.com/en-us/library/windows/desktop/dd319646(v=vs.85).aspx

        sekä

        OemToCharBuff function
        http://msdn.microsoft.com/en-us/library/windows/desktop/ms647494(v=vs.85).aspx

        JOS joku myöhempi lukija ei löydä noita (muuttuneen URLin takia) niin googleta esim:

        MSDN CharToOemBuff

        tuolla CharToOemBuff -funktiolla voi muuntaa ANSI tai WidString -merkkijonon OEM (=komentorivitilassa käytettäväksi) -merkkijonoksi.

        eli jos sovelluksesi käyttää sisäisesti 8-bittisiä merkkejä, funktio on tarkkaan ottaen:

        CharToOemBuffA

        mutta jos sovelluksesi käyttää UTF-16 koodattuja Unicode -merkkejä, silloin oikea funktio on tarkkaan ottaen:

        CharToOemBuffW

        Jos ei muuta tehtävässä mainita, voit olettaa, että sovelluksesi käyttää sisäisesti 8-bittisiä merkkejä, C-kielessä tyyppi char.

        Yleensä kuitenkin pelkkä CharToOemBuff riittää, koska se on alias joko A tai W -versioon riippuen kumpaa tapaa ohjelmassasi käytetään, ja oletus on yleensä tuo 8-bittinen "A" -tapa, ja tarvittaessa 16 -bittinen "W" -tapa valitaan erikseen kääntäjän optiolla tai määrelauseella.

        OemToCharBuff toimii päinvastaiseen suuntaan, eli jos komentoriviohjelma kysyy käyttäjältä tekstimuotoista tietoa, tuo muuntaa sen ohjelman sisäisesti käyttämään merkkivalikoimaan.

        Lue MSDN -linkeistä oikea tapa käyttää em. funktioita.


    • 423r23tfr23gt23

      en jaksa miettiä, mutta miksi et kirjoita alkufunktioon joka on main()

      Jos et ole palauttamassa mitään arvoa, niin kirjoita näin:

      void main(void)
      {

      return;

    • 434234556634634y

      En halua hirveästi neuvoa koska teidän opettaja ei varmasti pidä siitä sitten että joku 20v c-kokemusta omaava alkaa opettamaan opettajan rinnalla.

      Pientä jotain voin neuvoa.

      Mutta mukavaahan tuo on ja varsinkin tyttöjen mielestä on varmasti mukavaa kun saa tietokoneen ja "oliot" tekemään mitä itse haluaa.

    • kuulostaa tutulta

      Ihan sama tehtävänanto taisi pyöriä täällä viime vuonnakin..

    • Kiva tehtävä

      Joo toi on helppo. Itte tekisin siihen käyttöliittymäksi formin, jossa on kivan värinen OK-nappula ja kenttä, johon voi syöttää vaikka erikoismerkkejäkin. Loput speksit löytyy suoraan stl: stä.

    • t43ty34y45y45y

      Ei ole varmaankaan visual-c kysymyksessä joten formeja ei voida vielä käyttää.

      Silloin jos pitää olla välilyöntejä ja kaikkea muuta, joko getline() tai gets()=getstring.
      Kumpikin lopettaa sitten enterin eli rivin loppuun sisäänsyötön. eli return-näppäin tai enter antaa loppumerkin joka on "\r\n" tarkoittaa että rivin alkuun ja uusi rivi.

      käyttäisin getline-funktiota itse.

      Tietysti voisit käyttää vaikka scanf-funktiotakin, mutta joo monimutkaisempi käyttää.

    • tehtiinolioitajoo

      Mutta joo huvittaisi jotain isäntää kun kysyisi että mitä teitte koulussa: "teimme olioita" :)

    • oliottekemisissä

      Joo seuraavaa iltalehteä ei ehkä kannata ostaa, tuskin lottoakaan veikata kun voi olla teidän tekemiä "olioita" tekemisissä.

    • hddgfhg

      Imo tosi huono tehtävänanto. Ei tuossa tehtävässä saa ees soveltaa mitään kun määrätään noin tarkasti mitä pitää tehdä ja kuinka :)

    • pahojaolijoita

      Niin, vahingossa harjoitellessa voi tulla pahoja olioita (kuten scifi-elokuvissa on)

      Tarkoitus hyvä mutta vahingossa syntyy pahoja olioita!

    • moniaolioitanäkyy

      Mutta niin ei noita "include" tarvitsisi edes mainita c koodissa vain pelkästään "using namespace std", ja miksi on moniin kertoihin.

      Ja monia muitakin kummallisuuksia näkyy tuossa koodissa.

    • 4234234234234235

      No minä voin kirjoittaa tuollaisen koodin tuosta vain :

      unchar merkkijono[].

      void main (void)

      {
      getline(merkkijono);

      cout merkkijono....

      ja sitten return


      return ; (ei palautusarvoja)

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Voiko normaali ihminen ryhtyä vasemmistolaiseksi?

      Tätä jäin pohdiskelemaan.
      Maailman menoa
      202
      4248
    2. SDP haluaa 40 000 nettomaahanmuuttajaa

      SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah
      Maailman menoa
      146
      3798
    3. Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen

      No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat
      Maailman menoa
      136
      3245
    4. Hienoa! Eduskunta luopui käteisen käytöstä

      Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.
      Maailman menoa
      47
      1629
    5. Ikävä sinua mies

      Vuosia kuluu, mutta tunteet ei ole hävinnyt. Tasoittuneet toki, kun ei olla nähty. Järki palannut päähän kuitenkin. Se i
      Ikävä
      19
      1508
    6. Mikä tämä henkilö mahtaa touhuta Parkanossa

      Kamalaa https://www.ylasatakunta.fi/teksti/pirkanmaan-karajaoikeus-vangitsi-koiran-tappamisesta-epaillyn-6.68.127794.b58
      Parkano
      34
      1450
    7. Sulla on avaimet ja keinot

      Jos haluat jatkaa tutustumista. Itse olen niin jäässä etten pysty tekemään enää mitään. Pidempi keppi johon on helpompi
      Ikävä
      25
      1385
    8. Orpo loukkaantui fasismiin viittaavasta sanavalinnasta

      Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk
      Maailman menoa
      27
      1351
    9. Kiinnostaa - ei kiinnosta - kiinnostaapas

      Selittäkää hämmentyneelle miksi miehiä ei ikinä kiinnosta silloin, kun sitä olisi itsekin kiinnostunut? Sitten kun siirt
      Sinkut
      116
      1160
    10. Martina haluaa Marbellaan

      Martinan tekisi mieli ottaa lennot Marbellaan, jossa näkisisi kauniita ja hyväntuulisia ihmisiä. No sitten pitää matkust
      Kotimaiset julkkisjuorut
      215
      1063
    Aihe