paladyn12 [ Pretorianin ]
Turbo Pascal
Piszę programik bardzo łatwy jako zadanie domowe i mam pytanko. Wie może ktos jak zrobić by zablokować wpisywanie liter? Zrobiłem już cały program, który opiera się na liczbach i po wpisaniu litery wyskakuje błąd i program się zamyka, chcę aby po wpisaniu litery wyskakiwał komunikat : "Proszę podać liczbę", zamiast tego błędu.
likfidator2 [ Konsul ]
Dane wczytujesz jako string, a potem sprawdzasz czy jest to, rzeczywiście liczba.
Możesz to zrobić ręcznie, tzn. napisać funkcję, która testuje stringa i sprawdza, czy nie zawiera nic innego niż cyfry, a potem zwraca TRUE lub FALSE w zależności od wyniku.
Była też procedura konwertująca automatycznie string na integer, nazywała się chyba
val(s:string, var i: integer)
Poszukaj w googlach, łatwo to znaleźć, nie chce mi si szukać teraz pascala i sprawdzić jak to wszystko działa.
GBreal.II [ floydian ]
Musisz to zrobić ręcznie. Nie ma jakiejś funkcji, która Ci automatycznie to zablokuje.
Po wczytaniu znaku sprawdzasz, czy jest to cyfra. Na przykład znak po znaku funkcją ord(zmienna typu char)*
Oczywiście wczytujesz do stringa a nie od razu do integera. Jak w stringu będzie rzeczywiście liczba, to jest funkcja, która "wyciąga" z niego wartość.
* - dawno Pascala nie używałem, ale myślę, że ord się do tego powinien nadać.
likfidator2 [ Konsul ]
dawno Pascala nie używałem, ale myślę, że ord się do tego powinien nadać.
ord zamienia znak na byte, który odpowiada numerowi ASCII dla danego znaku. To nie jest odpowiednia funkcja.
Jeszcze raz:
1. Wczytaj ciąg znaków do zmiennej typu string.
2. sprawdź czy ciąg znaków zawiera tylko liczby(jak nie wiesz jak to zrobić, to napisz)
3. jeśli nie, to napisz stosowny komunikat np. "wprowadzoną złą liczbę" i wróć do 1 punktu
4. jeśli tak, to skonwertuj string na integer przy pomocy procedury val o której pisałem wcześniej.
GBreal.II [ floydian ]
ord zamienia znak na byte, który odpowiada numerowi ASCII dla danego znaku. To nie jest odpowiednia funkcja.
Aż sobie przeczytałem jakiś tutorial.
Punkt drugi Twojego opisu zrobiłbym następująco: dla każdego znaku w stringu sprawdź, czy ord od tego znaku zawiera się pomiędzy 48 a 57. Jeżeli nie, to wpisano nie tylko cyfry -> każ wprowadzić jeszcze raz. W przeciwnym przypadku cieszymy się i po wykonaniu pętli robimy val.
Źle myślę? Możliwe, że się poprzednio wyraziłem bardzo niejasno.
[edit] - fakt, słowo 'cyfra' zamiast 'liczba' w poprzednim poście może być problematyczne.

Widzący [ Legend ]
A co z przecinkiem? I to na dodatek tylko z jednym. Nigdzie nie napisano że liczba jest całkowita.