Eli miten saan ohjelman aloittamaan käyttäjän käskystä uudelleen, jos se on aliohjelma.
edit: typoja
Aliohjelman lopussa vaan kysyt käyttäjältä, haluaako hän uuden kierroksen, ja jos vastaus on myöntävä, kutsut aliohjelmaa.
Koodi tulee näyttämään jokseenkin tällaiselta (disclaimer: en osaa QBasicia):
Sub munhienosubi 'do j00r magic here 'kysy käyttäjältä If käyttäjä_käski Then munhienosubi End Sub
öö... hiukan sekavaa. :D
Eli jos tietty ehto toteutuu Subi kutsutaan uudelleen.
Hmm...
Säästätkö sormia vai näppäimistöä kun et viitsi kirjoittaa selvää kysymystä? :P Luin tuon kysymyksen yli kymmenen kertaa läpi enkä saanut siitä tolkkua. Tarkoititko siis todella tuota mitä blaze ehdotti? En saanut siitä millää sellaista kuten en myöskään mitää muutakaan.
Vastaappa vaikka ensitöiksesi pariin kysymykseen:
-Minkä haluat käynnistää uudelleen?
-Jos mikä olisi aliohjelma?
Edit: tuossa blazen hommassa on vain se vika, että pinomuisti täyttyy aika pian ja sitten tulee ERRORIA.
Edit2: Vai tuleeko se muuten tossa vastaan? Se pino siis.
1. ohjelman ilman ensimmäistä ali-ohjelmaa.
2. ali-ohjelma olisi kysymys haluaako ohjelman käyttäjä koittaa ohjelmaa uudelleen.
No tuohon ehdottaisin tämäntyyppistä ohjelmarakennetta:
do 'tähän kaikkee mitä sitten tartteekin 'tähän vaikka aliohjelmakutsuja 'tähän taas kaikkee muuta 'tähän tulee se aliohjelma, joka kysyy käyttäjältä, että haluaako alottaa ohjelman alusta loop until [i]ehto[/i] 'sitten tänn jotain jos tarttee
Vähän vaikee ehdottaa kun ei tiedä miten olet ohjelmasi toteuttanut.
Kai se gotollakin onnistuisi, mutta en suosittele käyttämään.
öö tuo ohjelma järjestys on kovin kummalinen
edit: oikeastaan en ymmärä yhtään tuota järjestystä
edit: onko tuo ohjelma järjestys ali-ohjelman vai pää-ohjelman
No selvennetäänpä :)
koko ohjelmasi on niin kuin looppi. Kun ajat ohjelman, joka vaikkapa kysyy kaksi lukua ja laskee sitten niiden summan ja tulostaa sen näytölle, se kulkee loopin läpi ja lopussa käyttäjältä kysytään, haluaako tämä kokeilla ohjelmaa uudestaan. Jos kyttäjä haluaa kokeilla uudelleen, hoidetaan asia niin, että loopin ehto on sellainen, että se "looppaa". Jos käyttäjä ei halua kokeilla ohjelmaa uudelleen, hoidetaan asia niin, että poistutaan loopista.
Tässä esimerkkikoodi selostuksestani(ei typoja testattu :P):
dim shared vastaus as string do cls print "Anna luku" input luku1 print "Anna toinen luku" input luku2 summa = luku1 + luku2 print summa kysy loop until vastaus = "e" or vastaus = "E" sub kysy() print "Haluatko kokeilla uudestaan? k/e" input vastaus end sub
Piti toi aliohjelmakin tonne lykätä ku siitä puhuit(ihan selvyyden vuoks tjsp)
Edit: Tossa ei kyllä tarttis käyttää yleistä muuttujaa...
siis minun koodini näyttää tältä niin tiedät jo minun aiheenikin.
------------------------ P Ä Ä - O H J E L M A ------------------------ DECLARE SUB ALKU () alku CLS DIM SHARED luku AS LONG DO INPUT "anna arvottavan luvun ylä-raja", yla& RANDOMIZE TIMER luku = INT((YLA& + 1) * RND) INPUT "Luku: ", arvaus IF arvaus = luku& THEN PRINT "oikein!!" ELSE PRINT "väärin!!" PRINT "Oikea luku oli"; luku END IF loppu LOOP UNTIL vastaus = "e" OR vastaus = "E" ---------------------------------- A L K U A L I - O H J E L M A ---------------------------------- SUB alku CLS PRINT "Luvun arvonta ohjelma" END SUB ---------------------------------- L O P P U A L I - O H J E L M A ---------------------------------- SUB loppu PRINT "Uudestaan?" INPUT "K/E", vastaus END SUB
tuollaiselta koodin pitäisi näyttää
edit: mutta koodi valittaa osasta ("e" OR) ja valitus on type mismatch
Tässä pari vinkkiä:
Tässä on vielä ohjelmasi korjattu versio:
CLS PRINT "Luvunarvontaohjelma" DIM luku AS LONG, arvaus AS LONG, yla AS LONG DIM vastaus AS STRING RANDOMIZE TIMER DO INPUT "Anna arvottavan luvun yläraja:", yla luku = INT((yla + 1) * RND) INPUT "Luku: ", arvaus IF arvaus = luku THEN PRINT "Oikein!!" ELSE PRINT "Väärin!!" PRINT "Oikea luku oli"; luku END IF PRINT "Uudestaan?" INPUT "K/E", vastaus LOOP UNTIL vastaus = "e" OR vastaus = "E"
tekojalka kirjoitti:
mutta koodi valittaa osasta ("e" OR) ja valitus on type mismatch
Yrität siis sijoittaa vääräntyyppistä tietoa vääräntyyppiseen muuttujaan. QB:ta en juurikaan tunne, mutta auttaisko, jos tuohon muuttujanimen perään laittais $:n (ts. korvaa kaikki 'vastaus' -> 'vastaus$')?
Tai jos tuon vastauksen määrittelis merkkijonoks. Dim vastaus As String
Yrität pistää lukumuuttujaan merkkiä. Määrittele siis tuo vastaus muuttuja.
Käsitit ilmeisesti väärin, mitä tarkoitin, kun sanoin, että globaalia muuttujaa ei ole pakko käyttää. Homman voi hoitaa funktioilla jolloin sitä ei tarvitse(kai...).
Joka tapauksessa. Lisää siis ohjelmasi alkuun:
dim shared vastaus as string
Mitä tolla alku subilla tossa tekee? Eihän käyttäjä edes periaatteessa huomaa sitä mitä se tulostaa.
Edit: Blaze ehti ensin... ja antti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.