kontrola wejscia scanf()

0

w jaki sposob moge kontrolowac to, co uzytkownik wprowadzi na wejscie scanf. Konkretniej - w jaki sposob zabezpieczyc sie przed podaniem na wejscie ciagu znakow zamiast na przyklad int'a, np :

int a;
printf("Podaj liczbe od 1 do 10 : ");
scanf("%d",a);

i uzytkownik podaje zamiast liczby od 1 do 10 : "cos tam cos tam sialalala", co powoduje ze program sie wysypuje.

Jak moge sprawdzic czy na pewno wprowadzil liczbe (dodatkowo, z przedzialu 1-10)?
czekam na odpowiedz

0
int main(int argc, char *argv[])
{
    
    int a;
    char   poprawne ; 
printf("Podaj liczbe od 1 do 10 : ");

poprawne = scanf("%d",&a) ; // scanf  zwróci 0 jeśli niepoprawne 1 jesli poprawne  ;
if (!poprawne || (a < 1 || a>10 )) printf("zla liczba");

 // jesli poprawne wyjdzie 0  to !poprawne da  1 więc jeśli nie porawne lub (a<1 lub a >10 ) zgłosimy bład.
  
  system("PAUSE");	
  return 0;
}
0

dzieki wielkie, nie pomyslalem ze mozna tak sprytnie kod wyjscia scanf przejac :) pozdrawiam i dzieki za szybka odpowiedz!

0

Mała poprawka:

poprawne = scanf("%d",&a) ;
if (!poprawne) fflush(stdin); //czyścimy pozostałe śmieci
if(a < 1 || a>10 )) printf("zla liczba");
0

mala poprawka: fflush(stdin) czesto nie dziala, wszystko zalezy na jakiej platformie siedzisz, a juz zwlaszcza w trybie interaktywnym. jedyna pewna metoda jest 'reczne' odebranie wszystkich smieci az-do-konca-linii -> gets()

0

http://cppreference.com/wiki/c/io/fflush

Funkcja fflush służy do wyświetlenia zawartości bufora, z którego się wyświetla (jak np stdout). Dla buforów, do których się czyta (jak np stdin) zachowanie fflush jest niezdefiniowane i może skutkować czymkolwiek. Jak komputer wybuchnie też będzie zgodne ze standardem :)

Poleganie na zachowaniu danej wersji danego kompilatora na danej platformie jest błędem.

//a tam błędem od razu... - Ranides
//stadard coraz bardziej podoba mi sie... nie ma to jak dobre fajerwerki;p - quetzalcoatl

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