Teen tässä ohjelmaa jossa aina välillä pitäisi saada koko ohjelma suoritettua ihan alusta. Miten tämä onnistuisi C++ ssa?
No, goto on aina vaihtoehto, mutta sitä ei tueta. Ettet voisi laittaa uudelleensuoritettavaa osaa funktioon, ja sitten kutsua tätä funktiota aina uudelleen?
Tee silmukka ohjelman alusta loppuun. Kun ohjelma halutaan käynnistää uudestaan, annat suorituksen jatkua silmukan loppuun. Kun taas haluat lopettaa ohjelman, poistut silmukasta, jolloin suoritus jatkuu mainin loppuun. Muuttujat täytyy tietysti muistaa nollata, jos tarpeen.
main(); laittaa ohjelman suorittamaan itsensä alusta.
Tuohan on tavallaan funktiokutsu. Aloittaako se siis varmasti ohjelman alusta, ettei vain avaa sitä mainia jotenkin sisäkkäin jo suoritettavaan mainiin, niin kuin muitakin funktioita?
OhO, keksinki ite :) Kiitos kuitenkin, täytyy koittaa vielä että mikä on järkevin ratkaisu.
hunajavohveli kirjoitti:
Tuohan on tavallaan funktiokutsu. Aloittaako se siis varmasti ohjelman alusta, ettei vain avaa sitä mainia jotenkin sisäkkäin jo suoritettavaan mainiin, niin kuin muitakin funktioita?
Ihan tavallisesti kutsuu itseään kuin mikä tahansa rekursiivinen funktio.
Deewiant kirjoitti:
hunajavohveli kirjoitti:
Tuohan on tavallaan funktiokutsu. Aloittaako se siis varmasti ohjelman alusta, ettei vain avaa sitä mainia jotenkin sisäkkäin jo suoritettavaan mainiin, niin kuin muitakin funktioita?
Ihan tavallisesti kutsuu itseään kuin mikä tahansa rekursiivinen funktio.
Eli olenko siis oikeassa, että se ei varsinaisesti aloita ohjelmaa alusta, vaan pinomuisti tulee vastaan, jos tuota tekee liian monta kertaa päällekäin?
Veikkaisin niin. Siksi juuri parempi tapa on tuo looppi:
int main() { while (true) { /* Tähän se ohjelma... * continue aloittaa alusta, * break tai return lopettavat */ } return 0; }
Ainakin minun mielestäni pinomuisti saattaa rosahtaa. Ja sitten kun nee muut main():t saavat itsensä suoritettua meno jatkuu siellä mistä sitä kutsuttiin :P
Kannattaisin tuohon uudelleen alkamiseen sitä että koko ohjelma on jossain muualla kuin main:ssa (jolloin se on helppo toistaa, kuten esim. Erkki-pelin kentillä sekoilu/seikkailu.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.