Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Символьный ввод-вывод и проверка достоверности ввода 305

утилиты Terminal, которая запускает соответствующую версию Unix. Однако в случае использования этой утилиты вероятно проще применять один из компиляторов командной строки (GCC или Clang), который можно загрузить из веб-сайта Apple.

Если перенаправление не работает, можете попытаться заставить программу открыть файл напрямую. В листинге 8.3 показан пример с минимальными пояснениями. Более подробную информацию можно найти в главе 13. Предназначенный для чтения файл должен находиться в том же каталоге, что и исполняемый файл.

Листинг 8.3. Программа file eof.с

Сводка перенаправление ввода и вывода В большинстве систем с языком С - фото 221

Сводка: перенаправление ввода и вывода

В большинстве систем с языком С перенаправление можно использовать либо для всех программ через операционную систему, либо только для программ на С посредством возможностей, предоставляемых компилятором С. В следующих примерах prog — это имя исполняемой программы, a filel и file2 — имена файлов.

Перенаправление вывода в файл (>)

prog >filel

Перенаправление ввода из файла (<)

prog

Комбинированное перенаправление

prog filel prog >filel

В обеих формах file2 применяется для ввода и filel для вывода.

Пробелы

Некоторые системы требуют наличие пробела слева от знака операции перенаправления и отсутствие пробела справа от этого знака. Другие системы (например, Unix) допускают наличие пробелов с обеих сторон либо или их отсутствие.

306 Глава 8

Создание дружественного пользовательского интерфейса

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

Работа с буферизированным вводом

Буферизированный ввод часто удобен для пользователя, т.к. он предоставляет возможность редактирования входных данных до отправки их в программу, но для программиста он может стать источником дополнительных забот, когда задействован символьный ввод. Как можно было заметить в ряде приводимых ранее примеров, проблема заключается в том, что буферизированный ввод требует нажатия клавиши для передачи введенных данных. Это действие пересылает также символ новой строки, который программа должна обработать. Давайте исследуем эту и другие проблемы на примере программы угадывания чисел. Вы выбираете число, а компьютер пытается его угадать. В программе применяется довольно скучный метод, но мы сосредоточимся на вводе-выводе, а не на алгоритме. В листинге 8.4 приведена начальная версия программы, которая требует дальнейшей доработки.

Листинг 8.4. Программа guess. с

Вот пример выполнения программы Выберите целое число в интервале от 1 до 100 - фото 222

Вот пример выполнения программы:

Выберите целое число в интервале от 1 до 100. Я попробую угадать его. Нажмите клавишу у, если моя догадка верна и клавишу n в противном случае.

Вашим числом является 1? п

Ладно, тогда это 2?

Ладно, тогда это 3? п

Ладно, тогда это 4?

Ладно, тогда это 5?

У

Я знал, что у меня получится!

Символьный ввод-вывод и проверка достоверности ввода 307

Вопреки ожиданиям алгоритма, реализованного в программе, мы выбрали небольшое число. Обратите внимание на то, что после ввода n программа делает два предположения. Дело в том, что программа читает ответ n как отрицание того, что было загадано число 1, и затем считывает символ новой строки как отрицание того факта, что было загадано число 2.

Одно из решений предусматривает использование цикла while для отбрасывания остатка введенной строки, включая символ новой строки. Дополнительное достоинство такого подхода состоит в том, что ответы вроде по или по way будут трактоваться просто как n. Версия в листинге 8.4 интерпретирует по как два ответа. Ниже показан пример цикла, в котором эта проблема устранена:

while (getchar() != 'у') /* получить ответ, сравнить су*/

{

printf("Ладно, тогда это %d?\n",++guess); while (getchar); != '\n')

continue; /* пропустить оставшуюся часть входной строки*/

}

В случае применения этого цикла получается следующий вывод:

Выберите целое число в интервале от 1 до 100. Я попробую угадать его.

Нажмите клавишу у, если моя догадка верна и клавишу n в противном случае.

Вашим числом является 1? п

Ладно, тогда это 2? по

Ладно, тогда это 3? по sir

Ладно, тогда это 4? forget it

Ладно, тогда это 5?

У

Я знал, что у меня получится!

Проблема с символом новой строки решена. Гем не менее, вряд ли можно посчитать нормальным тот факт, что f трактуется как n. Для устранения этого дефекта можно воспользоваться оператором if, чтобы отфильтровать другие ответы. Прежде всего, определите переменную типа char для хранения ответа:

char response;

Затем внесите изменения в цикл, чтобы он приобрел следующий вид:

while ((response = getchar()) != 'у') /* получить ответ */

{

if (response == 'n')

printf("Ладно, тогда это %d?\n",++guess); else

printf("Принимаются только варианты у или n.\"); while (getchar() != '\n’)

continue; /* пропустить оставшуюся часть входной строки*/

}

Теперь вывод выглядит так:

308 Глава 8

Выберите целое число в интервале от 1 до 100. Я попробую угадать его.

Нажмите клавишу у, если моя догадка верна и клавишу n в противном случае.

Вашим числом является 1?

n

Ладно, тогда это 2? no

Ладно, тогда это 3? no sir

Ладно, тогда это 4? forget it

Принимаются только варианты у или n. n

Ладно, тогда это 5?

y

/Я знал, что у меня получится!

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

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

Смешивание числового и символьного ввода

Предположим, что программа требует символьного ввода с помощью getchar() и числового ввода посредством scanf(). Каждая из этих функций хорошо делает свою работу, но смешивать их нелегко. Причина в том, что функция getchar() читает каждый символ, включая пробелы, символы табуляции и новой строки, в то время как scanf() при чтении чисел пропускает пробелы, символы табуляции и новой строки.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

Стивен Прата - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x