Чтение символов
getchar и putchar
«Чтение символов» — бесплатный урок C Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.
Чтение отдельных символов
В C есть функция getchar() для чтения по одному символу из стандартного ввода и функция putchar() для записи одного символа в стандартный вывод.
Обе функции находятся в <stdio.h>.
#include <stdio.h>
int main(void) {
putchar('H');
putchar('i');
putchar('\n');
return 0;
}Основы putchar
putchar(c) записывает символ c и возвращает записанный символ или EOF в случае ошибки.
Это самый простой способ вывести один байт.
#include <stdio.h>
int main(void) {
for (char c = 'A'; c <= 'E'; c++) {
putchar(c);
}
putchar('\n');
return 0;
}getchar возвращает int
getchar() возвращает int, а не char. Это важно, поскольку функция должна иметь возможность вернуть EOF — значение, отличное от любого настоящего символа.
Всегда сохраняйте результат в переменной типа int.
#include <stdio.h>
int main(void) {
int c = 'A';
printf("Stored value: %d\n", c);
return 0;
}Что такое EOF
EOF означает «конец файла». getchar() возвращает это значение, когда ввод заканчивается.
Обычно это значение -1. Поэтому getchar использует тип int, чтобы его нельзя было спутать с байтом 255.
#include <stdio.h>
int main(void) {
printf("EOF has value %d\n", EOF);
return 0;
}Шаблон цикла чтения
Классический шаблон читает символы до тех пор, пока не встретит EOF. Поскольку интерактивный ввод здесь отсутствует, цикл завершается сразу, но именно так обычно выглядит такой цикл.
- Выполняйте присваивание внутри условия.
- Сравнивайте результат с
EOF.
#include <stdio.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
printf("Reached end of input\n");
return 0;
}Подсчёт символов
Частая задача — подсчитать количество прочитанных символов. Увеличивайте счётчик внутри цикла чтения.
#include <stdio.h>
int main(void) {
int c;
long count = 0;
while ((c = getchar()) != EOF) {
count++;
}
printf("Read %ld characters\n", count);
return 0;
}Вывод в верхнем регистре
Перед записью можно преобразовать каждый символ. Здесь каждый прочитанный символ переводится в верхний регистр с помощью toupper.
#include <stdio.h>
#include <ctype.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) {
putchar(toupper(c));
}
return 0;
}Подсчёт строк
Подсчёт символов новой строки позволяет определить, сколько строк было прочитано. Сравнивайте каждый символ с '\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;
}Возврат символа во входной поток
ungetc(c, stdin) возвращает один символ во входной поток, чтобы при следующем чтении он снова был получен.
Это полезно, если во время сканирования Вы прочитали на один символ больше.
#include <stdio.h>
int main(void) {
ungetc('X', stdin);
int c = getchar();
printf("Got back: %c\n", c);
return 0;
}getchar и scanf
getchar предоставляет точный контроль на уровне байтов, а scanf разбирает форматированный ввод.
Для посимвольной обработки, например создания фильтров и токенизаторов, подходит именно 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;
}Простой каркас фильтра
Фильтры читают данные из ввода, преобразуют их и записывают в вывод. Этот каркас удаляет все пробелы из входного потока.
#include <stdio.h>
int main(void) {
int c;
while ((c = getchar()) != EOF) {
if (c != ' ') {
putchar(c);
}
}
return 0;
}Быстрая проверка
Проверьте, насколько хорошо Вы поняли чтение символов.
Итоги
Вы научились читать и записывать символы:
getchar()читает один символ и возвращает значение типаint.putchar(c)записывает один символ.EOFобозначает конец ввода; используйте циклwhile ((c = getchar()) != EOF).ungetcпозволяет вернуть символ во входной поток.
Часто задаваемые вопросы
Урок «Чтение символов» бесплатный?
Да — полный текст урока «Чтение символов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.
Чему я научусь в уроке «Чтение символов»?
getchar и putchar Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C Academy?
Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Чтение символов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C Academy?
Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.