Zabezpieczenie przed literami

Zabezpieczenie przed literami
Przemek Susoł
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
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?

Kopiuj
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
}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

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

Przemek Susoł
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
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?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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:

Kopiuj
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.

Przemek Susoł
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Okej, dzięki wielkie, już rozumiem

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.