Форматный ввод вывод
Примечание
Тексты в Си записываются в кавычках. В языке Си отсутствует специальный тип для работы со строками. Вместо этого строки представляются как массив типа char. Элементы строки, хранясь в массиве, записываются в смежные ячейки памяти. В конце строки ставится отметка \0. Наличие этой отметки говорит о том, что строка должна иметь размер на единицу больший, чем количество символов. Объявляется строка указанием типа char и записью размера в [].
Пример:
char name[40];
Для работы со строками к программе необходимо подключить файл string.h.
Каждая из функций ввода/вывода использует управляющую строку и список аргументов. Управляющая строка записывается первой и заключается в кавычки. Управляющие строки и аргументы не перемешиваются. Управляющие строки прежде всего содержат указание на вывод значения того или иного типа. Их называют спецификаторами преобразования.
Форматированный ввод с клавиатуры.Оператор вызова функции scanf () имеет следующую структуру:
scanf(форматная_строка, список_аргументов);
Данная функция осуществляет чтение символов, вводимых с клавиатуры, и преобразование их во внутреннее представление в соответствии с типом величин. В функции scanf () форматная строка и список аргументов присутствуют обязательно.
Оператор:
Scanf(”%f”,&a)
Здесь “%f “ - форматная строка; &а — список аргументов, состоящий из одного элемента. Этот оператор производит ввод числового значения в переменную а.
Символьную последовательность, вводимую с клавиатуры и воспринимаемую функцией scanf (), принято называть входным потоком. Функция scanf () разделяет этот поток на отдельные вводимые величины, интерпретирует их в соответствии с указанным типом и форматом и присваивает переменным, содержащимся в списке аргументов.
Список аргументов — это перечень вводимых переменных, причем перед именем каждой переменной ставится значок &. Это знак операции «взятие адреса переменной». Подробнее смысл этого действия будет объяснен позже, а пока примем это правило формально.
Форматная строка заключается в кавычки (как и для printf) и состоит из списка спецификаций. Каждая спецификация начинается со знака %, после которого могут следовать
* ширина_поля модификатор спецификатор
Из них обязательным элементом является лишь спецификатор. Для ввода числовых данных используются следующие спецификаторы:
d — для целых десятичных чисел (тип int);
u— для целых десятичных чисел без знака (тип unsigned int);
f — для вещественных чисел (тип float) в форме с фиксированной точкой;
е — для вещественных чисел (тип float) в форме с плавающей точкой.
Звездочка в спецификации позволяет пропустить во входном потоке определенное количество символов. Ширина поля — целое положительное число, позволяющее определить число символов из входного потока, принадлежащих значению соответствующей вводимой переменной. Как и в спецификациях вывода для функции printf () , в спецификациях вводи функции scanf () допустимо использование модификаторов h, l, L. Они применяются при вводе значений модифицированных типов:
hd — для ниодп значений чипа short int;
ld — для ввода значений типа long int:
lf, le - для ввода значений типа double в форме с фиксированной и плавающей точкой:
Lf, Le - для ввода значений типа 1ong double в форме с фиксированной и плавающей точкой.
Три величины а. b, с можно ввести одним оператором:
scanf(“%f%f%f “,&a,&b,&c);
Если последовательность ввода будет такой:
5 3.2 2.4 <Enter>
то переменные получат следующие значения: a = 5,0, b = 3,2, с = 2,4. Разделителем в потоке ввода между различными значениями может быть любое количество пробелов, а также другие пробельные символы: знак табуляции, конец строки. Только после нажатия на клавишу Enterвводимые значения присвоятся соответствующим переменным. До этого входной поток помещается в буфер клавиатуры и может редактироваться.
Пример ввода-вывода целого и вещественного чисел, символа и строки:
Int a;