sprawdzanie wartości pobieranej przez scanf()

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.

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;
}
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:

#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;
  }
0

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

 
while(getchar()!='\n') {}
0

Której części nie rozumiesz?

  • while?
  • getchar()?
  • !=?
  • '\n'?
0

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

0

Zrobił to by opróżnić bufor terminala

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