Zabezpieczenie przed literami

0

Cześć, czy mógłby mi ktoś wytłumaczyć jaką rolę pełni zmienna "c" w pętli, za co jest odpowiedzialne i jak działa?

int zmienna;
while(scanf("%d", &zmienna) != 1) //dopóki nie uda się wczytać
{
  //ew. komunikat błędu
  int c;
  while((c = getchar()) != '\n' && c != EOF); //pętla wyciągająca znaki z bufora
}
1

Do niej pobierana jest wartość wczytana z klawiatury (lub sentinel równy EOF), którą potem sprawdzasz.

0

Czyli jeżeli nie uda się wczytać zmiennej (warunek pierwszej pętli), to wtedy "uruchamiamy" zmienną c i sprawdzamy ją w kolejnej pętli, dobrze rozumiem?
Co w niej sprawdzamy?

2

Tak sobie. Dla każdego wywołania pętli c jest osobną zmienną z potencjalnie innymi wartościami. Tutaj jest kod o identycznym znaczeniu, a może będzie czytelniejszy:

int zmienna;
while(scanf("%d", &zmienna) != 1) //dopóki nie uda się wczytać
{
  //ew. komunikat błędu
  int c;
    //  while((c = getchar()) != '\n' && c != EOF); //pętla wyciągająca znaki z bufora
    while(true) {
        c = getchar();
        if(c == '\n')
            break;
        if(c == EOF)
            break;
    }
}

Inaczej mówiąc, z wejścia standardowego wyciągane są znaki aż do napotkania nowej linii lub zakończenia wejścia.

0

Okej, dzięki wielkie, już rozumiem

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