Przy przejściu programu przez linię
Val(s,n,kod);
gdy s='X' otrzymuję n=0, ale kod=3, a powinien być 1.
s jest typu string, n oraz kod typu integer.
Czy ktoś ma jakiś pomysł, dlaczego tak się dzieje?
Czy są jeszcze inne takie pułapki?
Przy przejściu programu przez linię
Val(s,n,kod);
gdy s='X' otrzymuję n=0, ale kod=3, a powinien być 1.
s jest typu string, n oraz kod typu integer.
Czy ktoś ma jakiś pomysł, dlaczego tak się dzieje?
Czy są jeszcze inne takie pułapki?
Dzieje się ponieważ są różne sposoby zapisu liczb. Może to być liczba ze znakiem (spróbuj dać "+" albo "-" ), w systemie hexadecymalnym (przedrostek "$", "x", "0x", lub zapis naukowy ("e")
Jednak pozycja błędnego znaku jest nieprawidłowa przykładowo dla "x" zwraca 3 podczas gdy wydaje mi się, że to powinno być 2 (bo nie ma 2 znaku, który miał być wystąpić po przedrostku zapisu hexadecymalnego) lub normalnie 1 (już pierwszy znak jest nieprawidłowy). Trzeba by napisać jakaś funkcję obudowującą Val i korygującą zwracane wartości gdy na początku stringa występują wspomniane znaki biorąc pod uwagę zarówno małe jak i duże litery.
Ciekawa sprawa.
Jak damy n:Real to już jest dobrze.
Dziękuję! Chciałem przy użyciu procedury Val podzielić string na kawałki, na zmianę liczba-nieliczba. Przy niektórych stringach zawierających literę 'X' wszystko się sypało. Teraz trochę zmodyfikowałem i cel osiągam ;-)