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?
SINGLE/INT/DOUBLE/LONG-muuttujia ei voi suoraan lisätä STRING-muuttujaan. Käytä funktiota STRING$(luku), eli
SH$ = "Ura: " + STRING$(ura) + "t (" + msn + "), " ...
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.
Paaaljon kiitoksia. Nyt toimii loistavasti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.