С клавиатуры вводится строка символов. Вывести на экран все согласные символы, встречающиеся в строке - C (СИ)
Формулировка задачи:
С клавиатуры вводится строка символов. Вывести на экран все согласные символы, встречающиеся в строке.на СИ
Решение задачи: «С клавиатуры вводится строка символов. Вывести на экран все согласные символы, встречающиеся в строке»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define CONSONANTS "bcdfghjklmnpqrstvwxyz"
int main(void) {
char buf[BUFSIZ], * ptr;
while ( printf("\nString: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' && printf("Consonants: ") )
for ( ptr = buf; *ptr; ++ ptr )
if ( strchr(CONSONANTS, tolower(*ptr)) )
printf("%c", *ptr);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Синтаксический анализ:
- Используется препроцессорный директива
#includeдля импорта необходимых библиотек:stdio.hдля ввода-вывода,string.hдля работы со строками иctype.hдля работы с типами символов. - Определяется макрос
CONSONANTS, который содержит все согласные буквы в нижнем регистре. - Функция
mainописывает точку входа в программу. - Объявлены переменные
bufиptr. Переменнаяbufявляется буфером для ввода строки из консоли, а переменнаяptrиспользуется как указатель на текущий символ в буфере. - Организован цикл
while, который будет выполняться до тех пор, пока пользователь не введет пустую строку. - Внутри цикла происходит вывод приглашения для ввода строки и самого ввода строки в буфер.
- Далее происходит проверка на окончание строки (перевод строки
\n) и переход к следующему символу в буфере. - Для каждого символа в буфере проверяется, является ли он согласным. Если да, то он выводится на экран.
- В конце цикла возвращается 0, что означает успешное завершение программы.
- Используется препроцессорный директива
- Логика работы программы:
- Программа запрашивает у пользователя ввод строки.
- Если пользователь вводит пустую строку, цикл завершается.
- Для каждого символа в строке проверяется, является ли он согласным. Если да, то он выводится на экран.
- В конце программы выводится 0, что означает успешное завершение.
- Ошибки и улучшения:
- Код не обрабатывает исключения или ошибки ввода-вывода. Например, если пользователь введет больше символов, чем есть в буфере, код не будет обрабатывать переполнение буфера.
- Код не обрабатывает неконсольные символы. Если пользователь введет символ, который не может быть преобразован в управляющий символ, код не будет знать, как с ним работать.
- Код можно улучшить, добавив обработку исключений и ошибок ввода-вывода, чтобы программа была более надежной и устойчивой к ошибкам.