Найти в Дзене
interrupt 21h

K&R: решение 1-6, 1-7, 1-8, 1-9 и 1-10

Решим еще 5 упражнений. Первые два из них разминочные 😁 Упражнение 1.6. Проверьте, что выражение getchar() != EOF действительно равно 1 или 0. В терминале Linux для отправки EOF ("End Of File" - признак конца файла) используется сочетание клавиш Ctrl+D. Программа проверки выражения getchar() != EOF должна считывать один символ, выдавать значение выражения и завершать свою работу. Исходный код я вижу таким: Попробуем скомпилировать и напечатать любой символ: После ввода символа 'i' программа напечатала 1 и завершила работу. А что будет если послать ей EOF? Отлично! Результат 0. Идем дальше. Упражнение 1.7. Напишите программу для вывода значения константы EOF. Легко! 😎 Значение EOF это -1 😮 Разминка закончилась. Упражнение 1.8. Напишите программу для подсчета пробелов, знаков табуляции и символов конца строки. Тоже просто - считываем символы до конца ввода и проверяем каждый на пробел, табуляцию или знак конца строки, увеличивая соответствующий счетчик. Но есть такой момент, что конс

Решим еще 5 упражнений. Первые два из них разминочные 😁

Упражнение 1.6. Проверьте, что выражение getchar() != EOF действительно равно 1 или 0.

В терминале Linux для отправки EOF ("End Of File" - признак конца файла) используется сочетание клавиш Ctrl+D. Программа проверки выражения getchar() != EOF должна считывать один символ, выдавать значение выражения и завершать свою работу. Исходный код я вижу таким:

Попробуем скомпилировать и напечатать любой символ:

После ввода символа 'i' программа напечатала 1 и завершила работу. А что будет если послать ей EOF?

-2

Отлично! Результат 0. Идем дальше.

Упражнение 1.7. Напишите программу для вывода значения константы EOF.

Легко! 😎

-3

Значение EOF это -1 😮 Разминка закончилась.

Упражнение 1.8. Напишите программу для подсчета пробелов, знаков табуляции и символов конца строки.

Тоже просто - считываем символы до конца ввода и проверяем каждый на пробел, табуляцию или знак конца строки, увеличивая соответствующий счетчик. Но есть такой момент, что конструкцию условного ветвления вида if ... else ... мы еще не знаем, поэтому код получился не совсем оптимальным:

Пускай программа проверит свой код на языке Си 😃

-4

Кстати, я сторонник табов, но я не смог разобраться как заставить gist показывать табы шириной в 4 символа, а не в 8, поэтому приходится писать код для моих статей на дзене с пробелами для отступов вместо табов 😒. Осталось еще два упражнения!

Упражнение 1.9. Напишите программу для копирования входного потока в выходной с заменой подряд стоящих пробелов в каждой строке на один пробел.

Ну вот уже задачка, которая заставляет подумать. Думаю ключ к решению состоит в том, чтобы завести признак, который будет указывать на то, что предыдущий символ был пробелом и если текущий символ тоже пробел, то не выводить его:

А если бы мы знали в Си операцию дизъюнкции (логическое ИЛИ), то код выглядел бы лаконичнее 😃

Проверим нашу программу:

-5

Вроде работает, а это значит что упражнение решено 😊. Пора разобраться с последним.

Упражнение 1.10. Напишите программу для копирования входного потока в выходной с заменой знаков табуляции на \t, символов возврата назад (Backspace) на \b, а обратных косых черт - на \\. Это сделает табуляции и символы возврата легко читаемыми в потоке.

Достаточно легкое упражнение, но если не знать операции И, ИЛИ и конструкцию ветвления, то заставит поднапрячься. У меня получился такой код:

И, по-моему, он работает идеально 🙈 Только я не знаю как проверить символ Backspace 🙄

-6

Ну вот еще 5 упражнений решены! 💪🏻👌🏻 Совсем скоро доберемся и до остальных 😃

#k&r #c #programming