Podałem Ci przecież jedno z rozwiązań - pewnie nawet nie przeanalizowałeś...
Za pobieranie liczby od użytkownika odpowiada dokładnie procedura GetNumber
:
procedure GetNumber(var Number: String; const Min, Max: Integer);
var
Num, ErrorID: Integer;
Key: Char;
Correct: Boolean;
begin
Num := 0;
ErrorID := 0;
Key := #0;
Correct := False;
repeat
Key := ReadKey;
if (Key = '0') or (Key = '1') or (Key = '2') or (Key = '3') or
(Key = '4') or (Key = '5') or (Key = '6') or (Key = '7') or
(Key = '8') or (Key = '9') then
begin
Number := Number + Key;
Write(Key);
end
else
begin
if Key = #8 then
begin
if Number <> '' then
begin
Delete(Number, Length(Number), 1);
Erase;
end;
end
else
if Key = #13 then
if Number <> '' then
begin
Val(Number, Num, ErrorID);
if ErrorID <> 0 then
begin
Num := 0;
ErrorID := 0;
end
else
if (Num >= Min) and (Num <= Max) then
Correct := True;
end;
end;
until (Key = #13) and (Number <> '') and (Correct);
WriteLn;
end;
Procedura jest stara i pisana w połowie z siostrą, stąd można ją trochę skrócić, jednak i w tej postaci działa bardzo dobrze; Algorytm ten pozwala jedynie na pobranie liczby naturalnej (bo w podanym programie służył do pobierania współrzędnych do rysowania prostokąta w konsoli), więc aby przystosować go pod inne (np. ujemne czy zmiennoprzecinkowe) trzeba go troszkę zmodyfikować; Pobierz sobie ten plik i sprawdź (ten co podałem pisany był pod TP7, ale FPC też powinien go przetrawić);
Jeśli nie chcesz blokować programu tylko pozwolić użytkownikowi na wpisanie dowolnych rzeczy a potem rozróżnić co podał, to zadeklaruj sobie zmienną łańcuchową (String
) i po podaniu czegokolwiek spróbuj ją przekonwertować (procedurą Val) i jeśli się powiedzie - zapisz sobie tą liczbę do zmiennej liczbowej, a jeśli nie to wyświetl stosowny komunikat i każ użytkownikowi podać nową;
Zastanów się jak to ma działać, rozpisz sobie krok po kroku co trzeba zrobić i spróbuj, a na pewno znajdziesz rozwiązanie;
Nie zapomnij, że procedura Erase
nie służy do kasowania pliku, tylko do usuwania na ekranie ostatniej cyfry z wprowadzanej przez użytkownika liczby i jest także zdefiniowana w pliku Square.pas
;