Kontrola poprawności danych

0

Jak sprawdzić, czy podana przez użytkownika liczba NIE JEST tekstem, liczbą zmiennoprzecinkową, obrazkiem albo jakimś innym dziwnym tworem?

int main (void) {
    printf("Zadanie 24.\n\n");
    printf("Autor: Tomasz Sulich\n\n");
    printf("Napisz program, który prosi użytkownika o podanie liczby całkowitej w systemie dziesiętnym i\n• jeśli jest dodatnia, to pisze, że tak jest,\n• w przeciwnym przypadku informuje, że jest to liczba niedodatnia. Pamiętaj o kontroli poprawności danych.\n\n");
    int a;
    scanf("%d",&a);
    printf("a");
  }
1

Mam dobre wieści: nie musisz nic sprawdzać. Liczba jest liczbą.

Jeśli chcesz kontrolować nieprawidłowe wejście: https://static.4programmers.net/C/FAQ/Zabezpieczenie_przed_wpisywaniem_liter

0
kq napisał(a):

Mam dobre wieści: nie musisz nic sprawdzać. Liczba jest liczbą.

Jeśli chcesz kontrolować nieprawidłowe wejście: https://static.4programmers.net/C/FAQ/Zabezpieczenie_przed_wpisywaniem_liter

W sumie też racja, zagapiłem się. Jak wpisuję Ala, to nie wyświetla się drugi raz ;) Ale jak w poniższym programie wpisuję "Ala", to wyświetla się "Podana liczba jest niedodatnia". Dlaczego?

int main (void) {
    printf("Zadanie 24.\n\n");
    printf("Autor: Tomasz Sulich\n\n");
    printf("Napisz program, który prosi użytkownika o podanie liczby całkowitej w systemie dziesiętnym i\n• jeśli jest dodatnia, to pisze, że tak jest,\n• w przeciwnym przypadku informuje, że jest to liczba niedodatnia. Pamiętaj o kontroli poprawności danych.\n\n");
    int a;
    scanf("%d",&a);
    if(a>0)
    {
      printf("Podana liczba jest dodatnia.\n");
    }
    else 
    {
      printf("Podana liczba jest niedodatnia.\n");
    }
  }

Dobra, tamta strona rozwiązała problem. Ale po co definiujemy c i jest ta druga linia?

int c;
  while((c = getchar()) != '\n' && c != EOF); /
1

Masz UB w kodzie - jeśli chcesz się zabezpieczać przed nieprawidłowym wejściem to skorzystaj z linka, który wkleiłem - tam masz wszystko wytłumaczone. Musisz sprawdzić czy udało się wczytać liczbę.

Druga linia jest na wypadek gdyby scanf nie wyczyścił bufora wejścia.

0
kq napisał(a):

Masz UB w kodzie - jeśli chcesz się zabezpieczać przed nieprawidłowym wejściem to skorzystaj z linka, który wkleiłem - tam masz wszystko wytłumaczone. Musisz sprawdzić czy udało się wczytać liczbę.

Druga linia jest na wypadek gdyby scanf nie wyczyścił bufora wejścia.

Okej, dziękuję.

0 użytkowników online, w tym zalogowanych: 0, gości: 0