sprawdzanie wartości pobieranej przez scanf()

sprawdzanie wartości pobieranej przez scanf()
DD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Witam mam taką funkcje ma ona sprawdzać czy wartość wprowadzona przez użytkownika jest wartością typu int. Problem polega na tym że jak wpisze znak to wypisuje mi tylko printf i nie wykonuje ponownego wczytania zmiennej.

Kopiuj
int ile()
{
    int a,b;
    printf("podaj zmienna calkowita \n");
    for(;;)
    {
    b=scanf("%d",&a);
    if(b) break;
    printf("podales zla wartosc wpisz ja od nowa \n");
    }
    return a;
}
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Po pierwsze, wykonuje ci to non stop, tylko że nie czyścisz buforu klawiatury więc po raz kolejny następuje próba wczytania tych samych literek zamiast liczby.
Po drugie, nie uzywaj bezsensownych nazw a,b - to się zemści.
Po trzecie, może lepiej taka forma:

Kopiuj
#include <stdio.h>

int inputInt(const char *msg)
  {
   int ret,good;
   for(;;)
     {
      printf("%s: ",msg);
      good=scanf("%d",&ret);
      while(getchar()!='\n') {}
      if(good) break;
      printf("Blad wprowadzenia\n");
     }
   return ret;
  }

int main()
  {
   printf("%d",inputInt("Podaj wartosc calkowita z zakresu (-2147483648 .. 2147483647) tak długi tekst pytania oczywiscie nie wkorzy cibie drogi uzytkowniku, poniewaz wkorzyc moze jedynie brak wyjasnienia czemu to scanf przyjal niepoprawna liczbe calkowita taka jak 5000000000"));
   return 0;
  }
DD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

mógłbyś mi wyjaśnić jak dokładnie działa

Kopiuj
 
while(getchar()!='\n') {}
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Której części nie rozumiesz?

  • while?
  • getchar()?
  • !=?
  • '\n'?
DD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Nie rozumiem czemu wykorzystałeś pętle w której jest funkcja getchar() i ma być różna od "\n"

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
0

Zrobił to by opróżnić bufor terminala

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.