0Pricing
C Academy · Lekcja

Odczytywanie znaków

getchar i putchar

Odczytywanie znaków to bezpłatna lekcja C Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.

Odczytywanie pojedynczych znaków

C udostępnia funkcję getchar() do odczytywania pojedynczych znaków ze standardowego wejścia oraz funkcję putchar() do zapisywania pojedynczych znaków na standardowym wyjściu.

Obie funkcje znajdują się w <stdio.h>.

#include <stdio.h>

int main(void) {
    putchar('H');
    putchar('i');
    putchar('\n');
    return 0;
}

Podstawy putchar

putchar(c) zapisuje znak c i zwraca zapisany znak albo EOF w przypadku błędu.

To najprostszy sposób na wyprowadzenie pojedynczego bajtu.

#include <stdio.h>

int main(void) {
    for (char c = 'A'; c <= 'E'; c++) {
        putchar(c);
    }
    putchar('\n');
    return 0;
}

getchar zwraca int

getchar() zwraca wartość typu int, a nie char. Jest to ważne, ponieważ funkcja musi móc zwrócić EOF — wartość różną od każdego rzeczywistego znaku.

Wynik należy zawsze przechowywać w zmiennej typu int.

#include <stdio.h>

int main(void) {
    int c = 'A';
    printf("Stored value: %d\n", c);
    return 0;
}

Czym jest EOF

EOF oznacza koniec pliku (End Of File). getchar() zwraca tę wartość, gdy nie ma już więcej danych wejściowych.

Zwykle jest to wartość -1, dlatego getchar używa typu int, aby nie pomylić jej z bajtem 255.

#include <stdio.h>

int main(void) {
    printf("EOF has value %d\n", EOF);
    return 0;
}

Schemat pętli odczytu

Klasyczny schemat odczytuje znaki aż do napotkania EOF. Ponieważ w tym miejscu nie ma interaktywnego wejścia, pętla kończy się natychmiast, ale właśnie tak wygląda standardowy schemat.

  • Przypisanie należy wykonać wewnątrz warunku.
  • Należy porównać wynik z EOF.
#include <stdio.h>

int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        putchar(c);
    }
    printf("Reached end of input\n");
    return 0;
}

Liczenie znaków

Typowym zadaniem jest policzenie, ile znaków odczytano. Należy zwiększać licznik wewnątrz pętli odczytu.

#include <stdio.h>

int main(void) {
    int c;
    long count = 0;
    while ((c = getchar()) != EOF) {
        count++;
    }
    printf("Read %ld characters\n", count);
    return 0;
}

Echo wielkimi literami

Każdy znak można przekształcić przed jego zapisaniem. W tym przykładzie każdy odczytany znak jest zamieniany na wielką literę za pomocą toupper.

#include <stdio.h>
#include <ctype.h>

int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        putchar(toupper(c));
    }
    return 0;
}

Liczenie wierszy

Policzenie znaków nowej linii pozwala określić, ile wierszy odczytano. Należy porównać każdy znak z '\n'.

#include <stdio.h>

int main(void) {
    int c;
    int lines = 0;
    while ((c = getchar()) != EOF) {
        if (c == '\n') lines++;
    }
    printf("Lines: %d\n", lines);
    return 0;
}

Cofanie znaku

ungetc(c, stdin) wstawia jeden znak z powrotem do strumienia wejściowego, dzięki czemu następny odczyt zwróci go ponownie.

Jest to przydatne, gdy podczas skanowania odczytano o jeden znak za dużo.

#include <stdio.h>

int main(void) {
    ungetc('X', stdin);
    int c = getchar();
    printf("Got back: %c\n", c);
    return 0;
}

getchar a scanf

getchar zapewnia precyzyjną kontrolę na poziomie bajtów, natomiast scanf analizuje sformatowane dane wejściowe.

Do przetwarzania znak po znaku, na przykład w filtrach i tokenizerach, właściwym narzędziem jest getchar.

#include <stdio.h>

int main(void) {
    int c = '5';
    if (c >= '0' && c <= '9') {
        printf("It is a digit: %c\n", c);
    }
    return 0;
}

Prosty szkielet filtra

Filtry odczytują dane wejściowe, przekształcają je i zapisują na wyjściu. Ten szkielet usuwa wszystkie spacje ze strumienia wejściowego.

#include <stdio.h>

int main(void) {
    int c;
    while ((c = getchar()) != EOF) {
        if (c != ' ') {
            putchar(c);
        }
    }
    return 0;
}

Szybkie sprawdzenie

Sprawdź, jak dobrze rozumiesz odczytywanie znaków.

Podsumowanie

Nauczył się Pan odczytywać i zapisywać znaki:

  • getchar() odczytuje jeden znak i zwraca wartość typu int.
  • putchar(c) zapisuje jeden znak.
  • EOF sygnalizuje koniec danych wejściowych; należy używać pętli while ((c = getchar()) != EOF).
  • ungetc może wstawić znak z powrotem do strumienia.

Często zadawane pytania

Czy lekcja „Odczytywanie znaków” jest bezpłatna?

Tak — pełny tekst „Odczytywanie znaków” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Odczytywanie znaków”?

getchar i putchar Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C Academy?

Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Odczytywanie znaków”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?

Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Znaki jako liczby całkowite
  2. Biblioteka ctype
  3. Odczytywanie znaków
  4. Budowanie narzędzi do obsługi znaków
← Powrót do C Academy