Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zabezpieczenia przed wpisywaniem złych danych.

Ostatnio zmodyfikowano 2014-11-03 19:25
Autor Wiadomość
Teilor
Temat założony przez niniejszego użytkownika
zabezpieczenia przed wpisywaniem złych danych.
» 2014-11-03 19:01:08
Witam. Mam pytanie co do zabezpieczeń przed wpisywaniem złych danych.
Mam strukturę a w niej tablice charów:

C/C++
char imie[ 20 ];
char nazwisko[ 40 ];
itd...

Później w wywołaniu funkcji w dodawanku danych do struktury
korzystam z:
C/C++
cin >> struktura[ i ].imie

I tu moje pytanie jak nadaać zabezpieczenia, żeby użytkownik mógł wpisywać tylko litery, duze i małe.
Koczywiście warunek byłby raczej taki.
C/C++
if(( x > 64 && x < 91 ) ||( x > 96 && x < 123 ) )
Ale jak to rozwiązać żeby np. na bierząco sprawdzał czy zle wpisujemy i nie pozwolił napisać np liczby?

Z góry dziękuje i pozdrawiam! :(
P-119934
Monika90
» 2014-11-03 19:16:24
Możesz użyć <conio.h> i funkcji getch()
P-119937
Teilor
Temat założony przez niniejszego użytkownika
odp
» 2014-11-03 19:18:46
Tak ale jak to wbudować w te funkcje nie zbyt wiem jakby to miało działać - jak zbudowac, żeby potem np usuwał poprzedni znak źle wpisany ?
C/C++
void kontrola( int x, int y, char a[] )
{
    ekran( x, y );
   
   
    do {
       
        if(( getch() <= 64 && getch() >= 91 ) ||( getch() <= 96 && getch() >= 123 ) )
       
    }
    while( getch() )
}
Nie wiem jak zbytnio sie za to zabrać.
P-119939
Atexor
» 2014-11-03 19:25:07
Sprawdzanie na bieżąco może być dość skomplikowane, możesz skorzystać z getch() z biblioteki <conio.h>. Sam go używam (w innym celu), chociaż Visual Studio mi podpowiada przy kompilacji, że nie powinno się go używać, bo jest ze starego standardu - 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.

Według mnie do sprawdzania imion/nazwisk najlepiej użyćć ze string'ów i ew. potem zapisywać do tablicy typu string zamaist char (korzystając z tzw. dynamicznej alokacji pamięci lub vector'ów).

Zauważ, że mając tablicę o stałym rozmiarze ktoś może wpisać krótsze imię niż rozmiar tablicy (marnotrawienie pamięci), lub za dużo (wtedy brakuje indeksów w tablicy), poza tym imiona w takich tablicach będą "poszatkowane" - 1 komórka to 1 znak.

Zabezpieczenie sprawdzania "na bieżąco" w moim odczuciu jest trochę skomplikowane, bo każdy naciśnięty klawisz musi (bez entera) program sprawdzać oraz wiedzieć kiedy i jak przejść do wpisywania nazwiska, a nie wiadomo jak imię jest długie (Jan, czy Fryderyk).

Na początek chyba najlepiej sprawdzać, czy wpiszesz poprawnie całego stringa.

Kilka dni temu napisałem kod na wczytywanie liczb typu całkowitych lub zwykłych wymiernych (np. 4.5 i 12, inne znaki uznaje za błąd w tym np. 1n5 w liczbie):
http://pastebin.com/9Xi1Mbsg

Wystarczy go trochę zmodyfikować i myślę, że powinno działać - numery ASCII liter małych i dużych), zmienić kilka typów zmiennych oraz dodać warunek, że pierwsza litera musi być duża. Myślę, że sobie poradzisz.

Powodzenia :)
P-119940
« 1 »
  Strona 1 z 1