Язык программирования Си


         

Хрестоматия по программированию на Си в Unix- часть 328


- 328 - Си в UNIX

примере все case оформлены нетривиальным макросом Bcase.

7.54. Составьте программу кодировки и раскодировки файлов по заданному ключу (строке символов).

7.55. Составьте программу, которая запрашивает анкетные данные типа фамилии, имени, отчества, даты рождения и формирует файл. Программа должна отлавливать ошибки ввода несимвольной и нецифровой информации, выхода составляющих даты рождения за допустимые границы с выдачей сообщений об ошибках. Программа должна давать возможность корректи- ровать вводимые данные. Все данные об одном человеке записываются в одну строку файла через пробел. Вот возможный пример части диалога (ответы пользователя выделены жирно):

Введите месяц рождения [1-12]: 14 &lt<ENTER&gt> *** Неправильный номер месяца (14). Введите месяц рождения [1-12]: март &lt<ENTER&gt> *** Номер месяца содержит букву 'м'. Введите месяц рождения [1-12]: &lt<ENTER&gt> Вы хотите закончить ввод ? n

Введите месяц рождения [1-12]: 11 &lt<ENTER&gt> Ноябрь Введите дату рождения [1-30]: _

В таких программах обычно ответ пользователя вводится как строка:

printf("Введите месяц рождения [1-12]: "); fflush(stdout); gets(input_string);

затем (если надо) отбрасываются лишние пробелы в начале и в конце строки, затем вве- денный текст input_string анализируется на допустимость символов (нет ли в нем не цифр?), затем строка преобразуется к нужному типу (например, при помощи функции atoi

переводится в целое) и проверяется допустимость полученного значения, и.т.д. Вводимую информацию сначала заносите в структуру; затем записывайте содержимое полей структуры в файл в текстовом виде (используйте функцию fprintf, а не fwrite).

7.56. Составьте программу, осуществляющую выборку информации из файла, сформирован- ного в предыдущей задаче, и ее распечатку в табличном виде. Выборка должна осуществ- ляться по значению любого заданного поля (т.е. вы выбираете поле, задаете его значе- ние и получаете те строки, в которых значение указанного поля совпадает с заказанным вами значением). Усложнение: используйте функцию сравнения строки с регулярным выра- жением для выборки по шаблону поля (т.е. отбираются только те строки, в которых зна- чение заданного поля удовлетворяет шаблону). Для чтения файла используйте fscanf, либо fgets и затем sscanf. Второй способ лучше тем, что позволяет проверить по шаб- лону значение любого поля - не только текстового, но и числового: так 1234 (строка - изображение числа) удовлетворяет шаблону "12*".

7.57. Составьте вариант программы подсчета служебных слов языка Си, не учитывающий появление этих слов, заключенных в кавычки.

7.58. Составьте программу удаления из программы на языке Си всех комментариев. Обра- тите внимание на особые случаи со строками в кавычках и символьными константами; так строка

char s[] = "/*";

не является началом комментария! Комментарии записывайте в отдельный файл.

7.59. Составьте программу выдачи перекрестных ссылок, т.е. программу, которая выво- дит список всех идентификаторов переменных, используемых в программе, и для каждого из идентификаторов выводит список номеров строк, в которые он входит.




Содержание  Назад  Вперед