Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: Ongelma aliohjelmissa ja funktioissa

Codeprofile [02.03.2007 15:32:05]

#

Mikä seuraavassa koodinpätkässä on vikana, kun QuickBASIC 7.1 heittää ruudulle: "Type mismatch"?

FUNCTION SAVE
 SH$ = "Ura: " + ura + "t " + "(" + msn + "), " + "Pisteet: " + pisteet + "p, " + "rahat: " + rahat + "e."
 OPEN "data\SAVE\STAT.SAV" FOR BINARY AS #1
 A = LEN(SH$)
 PUT #1, 1, A
 FOR I = 1 TO A
 AA = ASC(MID$(SH$, I, 1))
 PUT #1, , AA
 NEXT
 CLOSE
END FUNCTION

Olen kokeillut kaikkia mahdollisia muuttujatyyppejä jokaiseen mahdolliseen kohtaan. Muuttuja ura on tällä hetkellä SINGLE.

Kun vaihdoin muuttujatyyppejä, ruudulle tuli hieman eri virheilmoitus.

Myös yllä olevan funktion tilalle on testattu SUBilla.

Olen pähkäillyt ja testaillut tuon kanssa jo useita tunteja, tuloksettomasti.

Vielä vähän lisää koodia ylimmiltä riveiltä:

rahat = 100
pisteet = 10
ura = 1
msn = "in the earth"
DECLARE SUB STAT ()
DECLARE FUNCTION SAVE ()

DIM valinta AS STRING, msn AS STRING, ura AS SINGLE

Mikä mättää, kun ura = SINGLE ja ruudulle tulostuu "Type mismatch" ja koodia hieman muutettuna "Syntax error" ja "Variable=Expression", ja OK:ta painettaessa sana 'ura' yllä olevasta funktiosta korostuu?

sqwiik [02.03.2007 15:47:02]

#

SINGLE/INT/DOUBLE/LONG-muuttujia ei voi suoraan lisätä STRING-muuttujaan. Käytä funktiota STRING$(luku), eli

SH$ = "Ura: " + STRING$(ura) + "t (" + msn + "), " ...

Antti Laaksonen [02.03.2007 15:49:44]

#

Ennen kuin luvun voi yhdistää merkkijonoon, se täytyy muuttaa merkkijonoksi. Tämä tapahtuu STR$-funktiolla. Jos luvun eteen ilmestyvä välilyönti häiritsee, sen saa pois LTRIM$-funktiolla. Näiden muutosten jälkeen lukua voi käsitellä samalla tavalla kuin merkkijonoja.

luku% = 123
mj1$ = "abc" + STR$(luku%) + "def"
mj2$ = "abc" + LTRIM$(STR$(luku%)) + "def"
PRINT mj1$ ' "abc 123def"
PRINT mj2$ ' "abc123def"

Huomaa muuten merkintöjen SUB (aliohjelma) ja FUNCTION (funktio) ero. Aliohjelma ei palauta mitään arvoa, mutta funktio palauttaa. Eli koodissasi oleva funktio SAVE olisi parempi määritellä aliohjelmana, jos se ei missään vaiheessa palauta mitään (SAVE = ...) eikä sen kutsun jälkeen yritetä tehdä mitään palautusarvolla.

Codeprofile [02.03.2007 16:03:05]

#

Paaaljon kiitoksia. Nyt toimii loistavasti.

Vastaus

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

Tietoa sivustosta