Эта операция выполняется функцией ввода, имеющей вид:
scanf (“форматная строка”, &аргумент,...), где
форматная строка – это список спецификаций форматов вводимых данных, разделённых запятыми;
&аргумент – адрес переменной (аргумента) в оперативной памяти, по которому будет записано значение переменной при вводе с клавиатуры.
Спецификация формата аргумента начинается с символа % (процент) и в простом случае должна содержать символ типа аргумента по шаблону
% тип.
Символ типа определяет, как интерпретируется компилятором вводимое значение аргумента:
тип переменной int (целый):
d, i – десятичное целое со знаком;
u – десятичное целое без знака (U – для типа long int);
o – восьмеричное число;
x – шестнадцатеричное число;
тип переменной float (вещественный):
f, e, E – вещественное число с фиксированной или плавающей точкой;
тип переменной char (символьный):
c – ввод одного символа;
s – ввод строки символов пока не встретится символ первого пробела
или '/n' (новая строка).
Пример. Ввести значения (исходные данные) в описанные переменные:
|
|
int m; float p1; char sim, str[80]; /* str символьный массив */
Функция ввода данных может иметь вид:
scanf (“%d%f%c%s”,&m, &p1, &sim, str);
Поскольку имя массива символов str задает адрес этого массива, постольку ему не предшествует символ адреса – &.
При вводе с клавиатуры числовые данные должны разделяться пробельным символом (путем нажатия клавиш <пробел> или <Enter>). Символьные данные не разделяются, поскольку пробельные символы прочитываются как вводимые символы. Например, с клавиатуры могут быть введены данные следующим образом:
25 37.08rHello /* в конце нажимается клавиша <Enter> */.
В памяти будут записаны значения переменных:
m=25, p1=37.08, sim=r, str=Hello\0 /* строка автоматически завершается управляющим символом конца строки ‘\0’ */.
При вводе данные поступают вначале во входной буфер stdin, а затем в оперативную память после нажатия клавиши <Enter> (ввод).
Для очистки буфера ввода stdin от оставшихся от предыдущего ввода символов используется функция
fflush (stdin).