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"??
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.
Jospa vaihtaisit kokonaislukumuuttujan tilalle char-taulukon tai stringin. Se varmaan jeesais.
edit. moi mä oon metabolix :--D (tää on siis "olen etana" "hidas!" -korvike)
Oon vähän tyhmä tässä C++:ssa. Ööh... Miten se tehdään?
#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)
Ei toimi vaikka kuinka, ja vaikka mitä yrittäisin. Ohjelma tulostaa vain tyhjän rivin.
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.
#include <iostream> int main() { char nimi[500]; cout << "Kirjoita nimesi:"; cin >> nimi; cout << "Terve " << nimi << "!"; return 0; }
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.
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 ;).
Ja kannattaa sitten jatkossa lukea ne kääntäjän virheilmoitukset, niillä kun on tarkoitus kertoa virheistä.
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 :-)
Megant kirjoitti:
[Paljon koodia]
Eikö tuonne olisi helpompi laittaa using namespace std; alkuun niin ei tarttis jokaseen kirjottaa std:: alkuun
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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.