Основные функции, осуществляющие ввод данных представлены в табл.2.5.
Таблица 2.5
Функции ввода
Имя
Функции
Описание
Файл, содержащий прототип
Scanf()
Gets()
Getchar()
Cscanf()
Cgets()
Getch()
Выполняет форматный ввод из потока stdin
Получает строку символов из потока stdin
Вводит символ из потока stdin
Выполняет форматный ввод с клавиатуры
Считывает строку символов с клавиатуры
Вводит символ с клавиатуры без эхо-печати
stdio.h
stdio.h
stdio.h
conio.h
conio.h
conio.h
Рассмотрим краткое описание этих функций.
Функции scanf() и cscanf() используются для интерактивного ввода. Обобщенная форма записи этих функций следующая:
(с)scanf (“строка форматов'', адрес, алрес,…);
В строке форматов применяются те же спецификаторы, которые были рассмотрены ранее для функции printf(): %d, %f, %c, %s (табл.2.4).
В отличие от функций printf() функция (с)scanf() требует указания в списке ввода не данных, а их адресов.
Пример:
/* ввод двух целых чисел в ячейки памяти ''а'' и ''b''*/
Вспомним, что имя массива указывает на его первый элемент, поэтому перед im не ставится символ &.
Входной поток разбивается на отдельные поля с помощью специальных знаков: пробелов, символов табуляции.
Внимание:Для ввода строки, содержащей пробелы, функцию (с)scanf () не используют. Для этой цели предназначена функция (с)gets().
Функции gets() и cgets() читают строку символов, оканчивающуюся символом перевода строки. Символ перевода строки заменяется на символ -терминатор ’\0’.
Пример:
# include <stdio.h>
#include <conio.h>
void main (void)
{
clrscr ();
char string [40];
printf (”Введите строку : ”);
gets (string);
printf (”Строка = %s \n”, string);
getch ( );
}
Функции getchar() и getch(). Функция getchar() предназначена для ввода одиночного символа. Возвращает считанный символ, преобразованный в целое число. Так как буфер stdin имеет размер в одну строку, то функция ничего не возвращает, пока не нажата клавиша ”Enter”.
Пример:
# include <stdio.h>
int main (void)
{
char c;
while ((c=getchar())!=’\n’)
printf (”%c”, c);
return 0;
}
Их можно производить с любыми целыми числами, переменными и константами. Их нельзя использовать с переменными типа float, double, long double.Поразрядными операциями являются:
& AND (и),
| OR (или),
^ XOR,
~ NOT (не),
<< сдвиг влево,
>> сдвиг вправо.
Операции AND, OR, NOT, XOR полностью соответствуют аналогичным логическим операциям. Поразрядные операции позволяют, в частности, обеспечить доступ к любому биту информации. Часто эти операции используют в драйверах устройств, программах, связанных с принтером, модемом и другими устройствами.
При выполнении поразрядной операции над двумя переменными, например типа char, операция производится над каждой парой соответствующих разрядов. Отличие поразрядных операций от логических и операций отношения состоит в том, что логическая операция и операция отношения всегда дают в результате 0 или 1. Для поразрядных операций это не так.
Приведем следующий пример:
Если надо установить значение старшего разряда переменной типа char равным нулю, то удобно применить операцию &(and).
ch = ch & 127;
Пусть ch = ’A’
‘A’ в двоичном коде: 11000001;
127 в двоичном коде: 01111111
‘A’ & 127: 01000001.
Если мы хотим установить для старшего разряда 1, удобна операция OR (или)
ch = ch | 128
‘A’ 11000001
127 10000000
‘A’ | 128 11000001.
Поразрядные операции удобны для хранения в сжатом виде информации о состоянии on/off (вкл/выкл). В одном байте можно хранить 8 таких флагов.
Операция сдвига. Форма представления:
value >> число позиций; value<< число позиций.
Пример. Двоичное представление числа х = 9: 00001001.
Тогда x = 9<<3: 01001000,
x = 9>>3 : 00000001.
Пример. Пусть unsigned char x = 255 в двоичном виде 11111111.