• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

zabezpieczenie przed błędnym wprowadzaniem danych w C

Object Storage Arubacloud
0 głosów
114 wizyt
pytanie zadane 10 listopada 2023 w C i C++ przez filip142 Nowicjusz (120 p.)
edycja 10 listopada 2023 przez filip142

Próbowałem zabezpieczyć poniższy fragment kodu przed błędnym wprowadzaniem wartości jednak program dalej nie działa przy wczytywaniu wartości niecałkowitych rozpoczynających się na 1 lub 2.
 

int w, m;

printf("Wybierz 1 aby wygenerowac nowy sygnal lub 2 aby wczytac sygnal z pliku.\n");
do
{
    m = 0;
    if (scanf("%d", &w) != 1)
    {
        m = 1;
        while (getchar() != '\n') {}
        printf("WYBIERZ JEDNA Z PODANYCH OPCJI\n");
        continue;
    }
    switch (w)
    {
    case 1:
        probki();
        wspolczynniki(l);
        dziedzina();
        przebieg_funkcji();
        break;
    case 2:
        plik_rozmiar();
        plik_odczyt();
        break;
    default:
        m = 1;
        printf("WYBIERZ JEDNA Z PODANYCH OPCJI\n");
    }

} while (m == 1);

 

komentarz 11 listopada 2023 przez Oscar Nałogowiec (29,320 p.)
Czytanie z 'konsoli' to czytanie strumienia znaków.

Scanf czyta liczby całkowite biorąc kolejne znaki i kończy gdy wczytany znak jest 'nie-cyfrą'. Potem możesz jeszcze wczytać ten znak np getchar-em i sprawdzić co to było.

A w linii 10 po prostu wczytujesz pozostałe znaki i je pomijasz do końca linii. Jeśli chcesz by po 1 był od razu ENTER to po co tam pętla, po prostu sprawdż czy getchar da '\n'.
1
komentarz 12 listopada 2023 przez TOWaD Mądrala (6,000 p.)

Mi się wydaje ze lina 10 jest jak najbardziej zasadna, bo czyści strumień z pozostałych znaków przed ponownym użyciem. Online jak by zrobić 

// while (getchar() != '\n');

to program się wywala.

komentarz 13 listopada 2023 przez Oscar Nałogowiec (29,320 p.)
Czyszczenie czyszczeniem - ale wcześniej trzeba sprawdzić co zostało.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
3 odpowiedzi 1,669 wizyt
+1 głos
3 odpowiedzi 799 wizyt
+1 głos
1 odpowiedź 184 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...