русс | укр

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

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

H- означает, что аргумент должен быть указателем на тип short.


Дата добавления: 2013-12-23; просмотров: 637; Нарушение авторских прав


 

Приведем примеры ввода данных из входного потока с помощью функции scanf( ).

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

code: цифрастрока1 символ строка2

 

Набранные жирным шрифтом элементы (цифра, символ и строка2) должны быть введены в программу, а элементы, набранные курсивом, будут использоваться для контроля (code:) и комментария (строка1).

Контроль заключается в том, что во входном потоке должна присутствовать именно строка "code:" (без кавычек). Строка строка1 используется для комментирования вводимых данных, может иметь произвольную длину и пропускается при вводе. Отметим, что строка1 и строка2 не должны содержать внутри себя пробелов. Текст программы приводится ниже:

 

Рассмотрим форматную строку функции scanf( ):

 

 

Строка "code:" присутствует во входном потоке для контроля вводимых данных и поэтому указана в форматной строке. Спецификации преобразования задают следующие действия:

%d - ввод десятичного целого;

%*s - пропуск строки (строка 1 в приведенной выше форме ввода);

%с - ввод одиночного символа;

%s - ввод строки.

Приведем результаты работы программы для трех различных наборов входных данных.

1. Последовательность символов исходных данных:

 

 

Результат выполнения программы:

 

 

Значением переменной ret является код возврата функции scanf( ). Число 3 говорит о том, что функция scanf( ) ввела данные без ошибки и было обработано 3 входных поля (строки "code:" и "поле2" пропускаются при вводе).



2. Последовательность символов исходных данных:

 

 

Результат выполнения программы:

 

 

Обратите внимание на то, что во входных данных пропущена строка перед символом D, использующаяся как комментарий. В результате символ D из входного потока был (в соответствии с форматной строкой) пропущен, а из строки "asd" в соответствии с требованием спецификации преобразования %с был введен символ 'а' в переменную с. Остаток строки "asd" (sd) был введен в массив символов s. Код возврата (ret=3) функции scanf( ) говорит о том, что функция завершила свою работу без ошибок и обработала 3 поля.

3. Последовательность символов исходных данных:

 

 

Результат выполнения программы:

 

 

Вместо предусмотренной в форматной строке последовательности символов в данных входного потока допущена ошибка (набрано слово cod: вместо code:). Функция scanf( ) завершается аварийно (код возврата равен 0). Функция printf( ) в качестве результата напечатала случайные значения переменных i, с и s ("мусор").

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

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

 

 

При правильном вводе данных (введено целое десятичное число) результат будет следующий:

 

 

Предположим, что пользователь ошибся и ввел, например, следующую последовательность символов "@%". (Эти символы будут введены, если нажаты клавиши '2' и '5', но на верхнем регистре, т.е. одновременно была нажата клавиша <Shift>.) В этом случае получится следующий результат:

 

 

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

 

 

Теперь при неправильном вводе данных результат будет таким:

 

 



<== предыдущая лекция | следующая лекция ==>
Спецификаторы форматной строки для функции форматного ввода | Двоичный (бинарный) режим обмена с файлами.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.