ATNEL tech-forum https://forum.atnel.pl/ |
|
[Język C] Zabezpieczenie przed wpisaniem litery zamiast cyfr https://forum.atnel.pl/topic23993.html |
Strona 1 z 1 |
Autor: | danny [ 23 paź 2021, o 16:04 ] |
Tytuł: | [Język C] Zabezpieczenie przed wpisaniem litery zamiast cyfr |
Witam Panowie, w programie użytkownik proszony jest o wprowadzenie kolejno trzech liczb. Jak zabezpieczyć program przed wpisaniem przez użytkownika litery? |
Autor: | danielos [ 23 paź 2021, o 17:46 ] |
Tytuł: | Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast |
Wg mnie najprościej sprawdzać czy zakres każdego znaku mieści się w określonych granicach, w tym przypadku cyfrach 0-9 (albo wg ASCI od 0x30 do 0x39). Pętla i warunek sprawdzający. Np.: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. albo |
Autor: | danny [ 23 paź 2021, o 17:59 ] |
Tytuł: | Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast |
danielos napisał(a): Wg mnie najprościej sprawdzać czy zakres każdego znaku mieści się w określonych granicach, w tym przypadku cyfrach 0-9 (albo wg ASCI od 0x30 do 0x39). Pętla i warunek sprawdzający. Np.: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. albo Dzięki, zadziała dla pojedyńczych cyfr 0-9. Pozostaje kwestia liczb całkowitych, ktore powinien pozwolić wpisać. Genaralnie ma w zalezności od 3 podanej wartości (od 1 do 3) sumować, odejmować lub mnożyć dwie pierwsze podane liczby. Jest to zrobione, pozostaje mi tylko zabepieczenie programu. |
Autor: | danielos [ 23 paź 2021, o 18:53 ] |
Tytuł: | Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast |
Pomyślmy razem: - Gdzie zapisywane są wpisane znaki? - Do zmiennej, która jest tabelą, a nazwa jej to tab. - Więc jak sprawdzić pierwszy element, czy wpisana jest cyfra? - No tak jak zostało podane używając tab[0]. - A jak sprawdzić dla, np 3 znaku? - Wpisując tab[2]. -Czyli co trzeba zrobić aby sprawdzić dla całego tekstu czy są same cyfry? -Sprawdzić każdą komórkę zmiennej tab. Reasumując musisz sprawdzić jaka jest długość wpisanego tekstu i na podstawie tej wartości tyle razy skontrolować czy dany znak to cyfra. Np.: |
Autor: | fofex [ 23 paź 2021, o 19:58 ] |
Tytuł: | Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast |
danielos napisał(a): Wg mnie najprościej sprawdzać czy zakres każdego znaku mieści się w określonych granicach, w tym przypadku cyfrach 0-9 (albo wg ASCI od 0x30 do 0x39). Biblioteka standardowa (plik nagłówkowy ctype.h) dostarcza grupę funkcji testujących znak. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Testowanie funkcją isdgit jest wygodne gdy mamy strumień znaków. W przypadku gdy wczytywanie znaków odbywa sie funkcją scanf nie jest to zbyt wygodne. Funkcja scanf jest buforowana a więc odczytanie znaków następuje po naciśnięciu entera. A więc można by wczytywać ciąg znaków jak leci jako string (ponieważ funkcja scanf nie "wywali się" po napotkaniu znaku niezgodnego ze wzorcem), a nastepnie testować wczytane znaki na okoliczność wystąpienia innego znaku niż cyfra. W razie wystąpienia takiego znaku całośc jest odrzucana, w razie braku ciąg można przerobić na liczbę. I tu znów pomocą służ biblioteka standardowa. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. ------------------------ [ Dodano po: 40 minutach ] No i mamy piękny okaz przepełnienia bufora Trzeba się zabezpieczyć ograniczając liczbę znaków odczytanych z wejścia. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Oczywiście należy także przewidzieć w buforze miejsce na końcowy null. |
Autor: | danielos [ 23 paź 2021, o 21:21 ] |
Tytuł: | Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast |
fofex napisał(a): Biblioteka standardowa (plik nagłówkowy ctype.h) dostarcza grupę funkcji testujących znak. Oooo i też się czegoś nauczyłem. Dzięki, przyda się. |
Autor: | tomcat65 [ 23 paź 2021, o 23:07 ] |
Tytuł: | Re: [Język C] Zabezpieczenie przed wpisaniem litery zamiast |
Jest też inny sposób. A. ograniczenie długości wpisywanej liczby można już w samym specyfikatorze np. %5d - pięć cyfr. Inny sposób to zamiana tablicy na zmienną: int/uintx_t wart1, wart2; i odczyt: scanf("%d", &wart1); scanf("%d", &wart2); B. funkcja scanf() zwraca wartość 1, jeśli wprowadzona dana jest zgodna ze specyfikatorem, a 0 jeśli niezgodna. zapis: if(scanf("%d", wart1)=!1) i tu np. stosowny komunikat. |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |