Nyt kun vähän aikaa sitten jaksoin siirtyä Basicin ja Pascalin kautta C++:aan, niin tuli eteen pieniä ongelmia.
Aika vaikeeta näin aluksi sisäistää tätä uutta tyyliä.
Eli. MIten tekstiä saa tiettyyn kohtaan ruutua. Löytyykö tähän ollenkaan keinoa vakiokirjastoista?
Toinen kysymys olisi, että miten tieto liikkuu pääohjelman ja funktioiden välillä?
En tiedä miten tekstin saa tiettyyn kohtaan ruutua kun ei ole koskaan ollut tarvetta niin tehdä mutta funktiot toimii yksinkertaistettuna näin:
#include <iostream.h> //funktio niminen funktio funktio() { cout << "funktio juu"; } int main() { funktio(); //tässä kohtaa kutsutaan funktio nimistä funktiota return 0; }
Jos määrittelet muuttujan koodin alussa main- ja muiden funktioiden ulkopuolella, muuttujista tulee jaettuja kaikkien funktioiden kesken.
Tekstin kirjoituskohdan määrittämiseen en tiedä muuta keinoa kuin Gotoxy, joka löytyy conio.h:sta. Tätä headeria ei kyllä löydy kaikista kääntäjistä.
Monissa tapauksissa tieto funktiosta toiseen on tietysti hyvä siirtää parametrien avulla.
-Spirit kirjoitti:
Eli. MIten tekstiä saa tiettyyn kohtaan ruutua. Löytyykö tähän ollenkaan keinoa vakiokirjastoista?
Eipä löydy. hunajavohvelin mainitsema conio.h löytyy ainakin Borlandin kääntäjistä vakiona, joten jos sinulla on se, se ratkaisee ongelmasi.
Muuten (ja ehkä Borlandinkin kanssa, on tämä sen verran kätsy) kannattaa käyttää monipuolista PDCurses-kirjastoa.
Kun kerran olet käyttänyt Pascalia, niin pääsääntöisesti sanoisin, että tieto liikkuu aivan samalla tavalla. Palautusarvon määrittely vain on erilainen:
int funktio(int a, int b)
on funktio, jonka syötteenä on kaksi int-arvoa ja joka palauttaa int-arvon.
Palauttaminen tapahtuu return
-komennolla, ja siihen katkeaa funktion suorittaminen. Result-muuttujaa ei siis ole. Palautusarvona on usein void
eli tyhjä, jolloin funktio vastaa Pascalin procedurea.
rndprogyn esimerkkiä kommentoisin sen verran, että funktion eteen olisi hyvä määritellä palautusarvo, vaikka se olisikin void
.
Millä olet Pascalissa tulostanut tekstiä tiettyyn kohti ruudulla? Pascalin vakiokirjastoilla se nimittäin ei onnistu, kuten ei myöskään C++:n.
lainaus:
rndprogyn esimerkkiä kommentoisin sen verran, että funktion eteen olisi hyvä määritellä palautusarvo, vaikka se olisikin void.
Miksi? Ja tuo oli vain yksinkertaistettu. Ja juuri noin taisi oli yhdessä tutoriaalissakin.
rndprogy kirjoitti:
Miksi? Ja tuo oli vain yksinkertaistettu. Ja juuri noin taisi oli yhdessä tutoriaalissakin.
Ei kaikkea kannata uskoa ;)
Tuon funktion palautusarvon lisäksi iostream.h:n tilalla sijasta kuuluisi käyttää iostreamia. Tällöin mm. cout on määritelty std-nimiavaruudessa.
warning C4508: 'funktio' : function should return a value; 'void' return type assumed
Näin sanoo VC++ -kääntäjä. Vaikkei tuo ohjelman toimintaan vaikutakaan, niin tämä on täysin tyylikysymys. Muistelisin vielä, että jokin kääntäjä sanoo 'int' return type assumed
ja valittaa seuraavaksi, että funktiosta puuttuu return
.
Hieman sama asia kuin tyypinmuunnokset; eiväthän nekään ole pakollisia:
double D = 0.1231231; int I = (int)D;
lainaus:
Millä olet Pascalissa tulostanut tekstiä tiettyyn kohti ruudulla? Pascalin vakiokirjastoilla se nimittäin ei onnistu, kuten ei myöskään C++:n.
Siis "Turbo" Pascalissa?
Ja DJGPP:tä käytän, rhiden kanssa.
Mutta kiitoksia vastauksista.
rndprogy kirjoitti:
En tiedä miten tekstin saa tiettyyn kohtaan ruutua kun ei ole koskaan ollut tarvetta niin tehdä mutta funktiot toimii yksinkertaistettuna näin:
#include <iostream.h> //funktio niminen funktio funktio() { cout << "funktio juu"; } int main() { funktio(); //tässä kohtaa kutsutaan funktio nimistä funktiota return 0; }
Itseasiassa asia hoidetaan oikeasti näin:
#include<iostream.h> using namespace std; void funkkari(); // Funktion prototyyppi void funkkari() // Funktion määrittely { cout << "Ollaan funktiossa\n"; } int main() { cout << "Ollaan mainissa\n"; funkkari(); // Funktion kutsu return 0; }
ja ajattelin että pistän vielä tälläsen funktion joka antaa paluuarvoja.
#include<iostream.h> using namespace std; int yhteen(int a, int b); // Funktion prototyyppi int yhteen(int a, int b) // Funktion määrittely { return a+b; } int main() { cout << "Kutsutaan yhteen funktiota arvoilla 8 ja 9\n"; cout << yhteen(8,9); return 0; }
kaviaari kirjoitti:
Itseasiassa asia hoidetaan oikeasti näin:
Kyllä se ainakin kääntäjästä meni läpi ja kirjoitti sen tekstin. Sitä paitsi olenkin käyttänyt lähinnä C:tä. Siksi tuli laitettua se noin.
Kaviaari kirjoitti:
Itseasiassa asia hoidetaan oikeasti näin:
Ei tarvitse prototyypata funktiota jos se on ennen toista funktiota, jossa sitä kutsutaan. Eli esimerkissäsi kannattaisi joko siirtää funktion "funkkari()" määrittely main()-funktion jälkeiseksi, tai prototyyppi poistaa. Eipä ole tietenkään pakko, mutta turhaan se prototyyppi nyt on siellä.
Hmm mmulla ei kyllä menny läpi, g++:aa käytän. Sori joo menihän se läpi ... ehem. sori :<
Eihän tuota funktion prototyyppiä tarvita jos funktio on koodin alussa. Tilanne olisi toinen, jos:
#include <stdio.h> void funktio(); int main() { funktio(); return 0; } void funktio() { printf("Moi!"); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.