Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelma takkuilee (eli en osaa)

Sivun loppuun

Codeprofile [05.01.2007 14:51:10]

#

Aloitin C++ ohjelmoinnin, mutta heti eteeni tuli ongelma tehdessäni "Kirjoita nimesi:"-ohjelmaa. ohjelmani koodi näyttää tältä:

#include <iostream.h>

int main()
{
    int nimi;
    cout << "Kirjoita nimesi:";
    cin >> nimi;
    cout << "Terve " << nimi << "!";
}

Mutta miksi ihmeessä tuo tulostaa tekstin "Terve 2!", vaikka kirjoitin nimeksi "testi"??

Megant [05.01.2007 14:56:23]

#

Koska int on lukutyyppi.

Käytä vaikka std::stringiä ja includoi string-otsikkotiedosto.

Ja älä käytä iostream.h:ta, se on vanhentunut, käytä iostreamia, siinä funktiot ovat määriteltynä tuohon std-nimiavaruuteen.

tgunner [05.01.2007 14:56:28]

#

Jospa vaihtaisit kokonaislukumuuttujan tilalle char-taulukon tai stringin. Se varmaan jeesais.

edit. moi mä oon metabolix :--D (tää on siis "olen etana" "hidas!" -korvike)

Codeprofile [05.01.2007 15:00:12]

#

Oon vähän tyhmä tässä C++:ssa. Ööh... Miten se tehdään?

Megant [05.01.2007 15:03:10]

#

#include <string>

int main() {
    std::string muuttuja;
    muuttuja = "moi, olen string-olio";
    return 0;
}

Ja tuosta tulikin mieleeni, et palauta mainista mitään arvoa. (Vähän sama kuin että palauttaisi satunnaisen arvon)

Codeprofile [05.01.2007 15:12:57]

#

Ei toimi vaikka kuinka, ja vaikka mitä yrittäisin. Ohjelma tulostaa vain tyhjän rivin.

tgunner [05.01.2007 15:22:45]

#

Vilautas nykyistä koodiasi. Kokeile vaikka char-taulukolla, jos ei stringillä mene. Muodossa char pepe[80];

edit. ja tuo sinun ensimmäinen koodisi ei sisällä using namespace std:tä ollenkaan. Tällöinhän et voi käyttää ciniä tai couttia.

Lahha [05.01.2007 15:22:58]

#

#include <iostream>

int main()
{
    char nimi[500];
    cout << "Kirjoita nimesi:";
    cin >> nimi;
    cout << "Terve " << nimi << "!";
    return 0;
}

Megant [05.01.2007 15:31:11]

#

TGunner kirjoitti:

edit. ja tuo sinun ensimmäinen koodisi ei sisällä using namespace std:tä ollenkaan. Tällöinhän et voi käyttää ciniä tai couttia.

iostream.h:ssa funktiot eivät ole nimiavaruudessa ja se on vanhentunut.
Kuten sanoin, nykyään käytetään iostreamia, jossa ne ovat määriteltynä std-nimiavaruuteen.

Lahha:
Tuossahan nyt ei määritellä näitä nimiavaruusjuttuja mitenkään.
Sinun pitää käyttää usingia, using namespacea tai std::ciniä ja std::coutia.

Codeprofile:
Melko turhaa alkaa selittämään, että ohjelmasi ei toimi.
Miten me voisimme auttaa, jos selität vain että sinulla on ongelma?
Eli näytä sitä koodia kuten TGunner sanoi, niin voimme esimerkiksi korjata sitä.

EDIT: No laitanpa sitten valmista koodia:

#include <iostream>
#include <string>

int main() {
    std::string nimi;

    std::cout << "Anna nimi: ";
    std::cin >> nimi;
    std::cout << "Nimesi on: " << nimi << "\n";

    return 0;
}

Ja std::cin >> ei sitten lue kuin yhden sanan.

Codeprofile [05.01.2007 15:31:46]

#

Ei toimi vieläkään :(.

EDIT: Ja IDE on sitten Dev-Cpp. Ei siinäkään pitäisi olla mitään vikaa (?)
EDIT2: Se koodihan on tuolla alussa. Olen kokeillut kaikkia noista muistakin koodeista, muttakun ei toimi.
EDIT3: Jess! No nyt toimii. Kiitos. Pian pääsette eroon näistä typeristä kysymyksistäni, kun olen opetellut enemmän ;).

Megant [05.01.2007 19:22:44]

#

Ja kannattaa sitten jatkossa lukea ne kääntäjän virheilmoitukset, niillä kun on tarkoitus kertoa virheistä.

Pekka Karjalainen [06.01.2007 12:21:08]

#

Megant kirjoitti:

Ja tuosta tulikin mieleeni, et palauta mainista mitään arvoa. (Vähän sama kuin että palauttaisi satunnaisen arvon)

Pikkuasiahan tämä on, mutta itse asiassa mainista voi jättää palauttamatta arvon C++-kielessä. Silloin Bjarne Stroustrupin kirjan mukaan systeemille palautetaan ilmoitus, että ohjelma suoritettiin onnistuneesti. Se ei ole satunnainen arvo.

Tri S itse kirjoittaa ensimmäisen ohjelman kirjansa kakkoskappaleessa näin:

#include <iostream>

int main ()
{
         std::cout << "Hello, world!\n";
}

Kirja on The C++ Programming Language 3. laitos, painettu vuonna 2006 (24. painokerta). Siitä tuo kohta löytyy sivulta 46.

Varmasti siis näkee oikeaa C++-koodia, jossa ei ole tätä mainin lopettavaa returnia. C-kielessä tilanne kuitenkin taitaisi olla juuri kuten Megant kuvasi. Ehkä on siis hyvä tapa tottua kirjoittamaan aina return-lause mainin loppuun, jos on molempien kielten kanssa tekemisissä. Turha tuollaiseen on tuhlata paljon aikaa. Vaikka tein sen jo :-)

tesmu [14.01.2007 12:45:39]

#

Megant kirjoitti:

[Paljon koodia]

Eikö tuonne olisi helpompi laittaa using namespace std; alkuun niin ei tarttis jokaseen kirjottaa std:: alkuun

Sharph [14.01.2007 13:39:12]

#

tesmu kirjoitti:

Megant kirjoitti:

[Paljon koodia]

Eikö tuonne olisi helpompi laittaa using namespace std; alkuun niin ei tarttis jokaseen kirjottaa std:: alkuun

Voisi siinä niinkin tehdä, mutta mielestäni usingin käyttäminen sekottaa koodia (ei kylläkään tällaisissa ohjelmissa), mielummin viittaan aina koko nimellä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta