Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
608 Кб
Скачать
☆

Int scanf ( строка формата , список ввода )

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

d,u - для ввода целых десятичных чисел;

o - для ввода восьмеричных чисел (можно со знаком);

x,X - для ввода шестнадцатеричных чисел (можно со знаком);

i - для ввода целых чисел, которые могут задаваться любой целой константой языка С (т.е. восьмеричные константы начинаются с 0, а шестнадцатеричные - с 0x);

c - для ввода символов;

f,e,E,g,G - для ввода вещественных чисел, которые могут изображаться любой десятичной константой с фиксированной или плавающей точкой.

Модификаторы “ - ”, длина поля и точность при вводе игнорируются. Введенное значение затем преобразуется к типу вводимой переменной. Для данных типа int и unsigned можно использовать спецификации d,u,o,x,X,i, но для переменных типа long обязательно следует указать модификатор l, т.е. использовать спецификации ld,lu и т.д. Данные типа char и unsigned char можно вводить по формату c. Спецификации f,e,E,g,G применимы для ввода переменных типа float, для переменных типа double добавляется модификатор l. Вводимые числа разделяются любым количеством пробелов. Символы считываются подряд, если перед каким-либо из элементов формата %с не стоит пробел; в противном случае пробелы считаются разделителями. Строка формата может содержать перед первым % некоторую последовательность символов, тогда вводимая строка данных должна начинаться этой последовательностью, которая пропускается функцией scanf и лишь со следующего символа начинается ввод данных. Функция scanf осуществляет ввод до обнаружения первого недопустимого символа во входном потоке и возвращает количество успешно введенных значений (аварийного прерывания при обнаружении неверных входных данных не происходит). Однако функция никак не контролирует соответствие типа вводимых переменных и используемых элементов формата.

Для ввода-вывода символов используются функции getchar и putchar. Функция int getchar() возвращает введенный символ, преобразованный к типу int. Функция int putchar(int c) выводит в символьном виде значение c и возвращает выведенное значение. Прототипы функций scanf, printf, getchar и putchar находятся в файле stdio.h . Недостатком функции getchar является необходимость после набора символа нажимать клавишу Enter. В большинстве случаев вместо нее удобно пользоваться функциями, прототипы которых находятся в conio.h : int getch() и int getche() . Эти функции возвращают значение, соответствующее нажатой клавише (аналогичны функции ReadKey в языке PASCAL). При этом getche высвечивает на экране введенный символ, а getch - нет. С помощью этих функций можно опрашивать и клавиши, генерирующие два кода, - стрелки, функциональные клавиши и т.п.

Язык С++ полностью поддерживает средства ввода-вывода языка С. Вместе с тем в С++ введен новый способ ввода-вывода, который носит название ввода-вывода потоком. Поток определяется как некоторый абстрактный тип данных, представляющий последовательность элементов данных, направленную от источника (source) к потребителю (consumer). Количество элементов в потоке называется его длиной, порядковый номер доступного в некоторый момент элемента называют текущей позицией (current position). Используемые в программах потоки логически делятся на три типа:

1) входные, из которых читается информация;

2) выходные, в которые передаются данные;

3) двунаправленные, допускающие как чтение, так и запись.

В начале выполнения программы автоматически открываются четыре потока: cin, cout, cerr и clog, описанные в файле iostream.h . Поток cin связан со стандартным вводом (по умолчанию с клавиатурой), cout - со стандартным выводом (по умолчанию с дисплеем). Вместо записи:

#include <stdio.h>

printf("Вывод = %d,%f\n",i,r); scanf("%d",&x);

на С++ можно записать:

#include <iostream.h>

cout<<"Вывод="<<i<<","<<r<<endl; cin>>element;

Выполнение операции >> (извлечение из потока) заключается в преобразовании последовательности символов потока в значение типизированного объекта. При выполнении операции << (включение в поток) совершается обратное преобразование - типизированное значение выражения преобразуется в последовательность символов потока. Отметим, что операции << и >> распознаются как операции потокового ввода-вывода, если они употребляются справа от имен потоковых объектов

cin >> имя_объекта_базового типа

cout << выражение_базового_типа

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

cout << (x+y<z);

Операции сдвига также можно использовать в выводимых выражениях, но обязательно должны быть использованы скобки. Оператор cout<<(2<<1); выведет в поток значение 4. В библиотеке потокового ввода-вывода С++ предусмотрена возможность форматирования передаваемых данных, для этого применяются два способа. Первый состоит в использовании флагов форматирования, которые унаследованы всеми потоками библиотеки из базового класса ios. При втором способе форматирования употребляется специальный вид функций, называемых манипуляторами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]