Wejscie/wyjscie pascal - Sprawdzenie poprawnosci typu

0

Witam. Podczas pisania natknalem sie na pewniem problem. Nie mam pojecia jak moge sprawdzic czy to co podaje mi uzytkownik to poprawny typ, taki jaki oczekuje program. Przyklad:

mam typ

Rozmiar=(maly,sredni,duzy)
abc:Rozmiar;

uzytkownik w konsoli wpisuje jakiś tekst i ja chce sprawdzic czy jest on typem "Rozmiar"

readln(abc);

taka operacja przy niepoprawnych danych konczy sie crashem... I jak temu zapobiec ?

1

Możesz sobie wpakować Readln do bloku Try Except, ale w trybie debugowania program zgłosi RunError(106) (zakładam, że korzystasz z Lazarusa); Po uruchomieniu programu bezpośrednio z dysku (nie przez środowisko) żadnego komunikatu nie otrzymasz, program nie przerwie działania i wykona kod znajdujący się pod Except;

Podobnie będzie jeśli skorzystasz z dyrektywy $I, tyle że program zamknie się po podaniu błędnej wartości; Nie wiem czy to tylko u mnie tak jest, ale po uruchomieniu przez Run nawet przy wyłączonej obsłudze IO program zamyka się natychmiast, a przy debugowaniu instrukcja po instrukcji nie przerwie, ale Readln na końcu pominie - dziwne; Testowane pod Lazarusem 1.0.12, bo Delphi7 nie pozwoli na wczytanie typu wyliczeniowego z klawiatury.

0

Dzieki jutro sprobuje to ogarnąc :)

a co do IO to wlasnie nic to nie daje boi tak sie crashuje... a moj program musi być w pelni idioto-odporny...

0

a co do IO to wlasnie nic to nie daje boi tak sie crashuje...

Nie kreszuje - po prostu wyłącza się awaryjnie :]

a moj program musi być w pelni idioto-odporny...

W trybie debugowania oba sposoby zawiodą, bo (przynajmniej pod Lazarusem) po wprowadzeniu błędnego typu program i tak albo się wyłączy awaryjnie (po prostu przerwie działanie), albo zgłosi wyjątek; U mnie akurat chyba debuger jest skopanu, bo po wystąpieniu wyjątku nie mogę kontynuować debugowania programu, dlatego muszę przerwać działanie; Pod starym Delphi7 takich jaj nie ma i mogę dalej debugować;

Jeśli uruchomisz program poza środowiskiem to bez względu na to, czy wyłączysz obsługę błędów IO czy skorzystasz z obsługi wyjątków program i tak nie pokaże okna komunikatu tylko wykona poprawnie kod, jaki ma być wykonany po wprowadzeniu błędnych danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1