Scanf( )
Выровненый вывод
Спецификатор точности
Спецификатор минимума ширины поля
Модификаторы формата
Таблица 2
Опциональные префиксы для целых чисел
Код | Значение |
h | Короткое целое short |
l | Длинное целое long |
ll | Дважды длинное целое long long |
I32 | Тип __int32 |
I64 | Тип __int64 |
Целое число, помещаемое между знаком % и кодом формата, рассматривается как спецификатор минимума ширины поля.
Пример
#include <stdio.h>
int main(void)
{
double item;
item = 10.12304;
printf(“%f\n”, item);
printf(“%10f\n”, item);
printf(“%012f\n”,item);
return 0;
}
Спецификатор точности состоит из точки, за которой следует целое число.
#include <stdio.h>
int main(void)
{
printf(“%.4f\n”, 123.1234567);
printf(“%3.8d\n”, 1000);
printf(“%10.15s\n”, “This is a simple test”);
return 0;
}
В результате получим
123.1235
This is a simpl
Модификаторы * и #
Помещение # перед g, G, f, e или E обеспечивает наличие десятичной точки в случае отсутствия дробной части. Если перед спецификатором o поместить #, то выведенное число будет иметь в начале 0. Если перед спецификаторами формата x или X поставить #, то шестнадцатеричное число будет печататься с префиксом 0x. Нельзя применять # к другим спецификаторам формата.
Помимо констант, спецификаторы минимальной ширины поля и точности могут предоставляться аргументами printf(). Для реализации этого следует использовать *.
printf(“%*.*f”, 10, 4, 123.4)
Стандартный ввод с консоли, как правило, осуществляется с помощью scanf(). Она читает все стандартные типы данных и автоматически преобразует числа к правильному внутреннему формату. Стандартный вид scanf() следующий:
int scanf(const char * форматная_строка, …);
форматная_строка определяет способ чтения значений в переменные, на которые указывает список аргументов. Форматная строка состоит из трёх типов символов:
- Спецификаторы формата
- Специальные символы
- Стандартные символы
Функция scanf( ) возвращает число введённых полей. Она возвращает EOF, если обнаруживается преждевременный конец файла.
Спецификаторы формата перечислены в следующей таблице:
Код %c %d %i %e %f %lf %g %o %s %x %p %n %u %[] | Значение Читает одиночные символы Читает десятичное число Читает десятичное число Читает число с плавающей запятой Читает число с плавающей запятой Читает число с плавающей запятой двойной точности Читает число с плавающей запятой Читает восьмеричное число Читает строку Читает шестнадцатеричное число Читает указатель Получает целочисленное значение, равное числу прочитанных символов Читает беззнаковое целое Сканирует множество символов |
В scanf( )следует передавать адреса. Это означает, что все аргументы должны быть указателями на переменные. Например, для чтения целого в переменную count надо использовать следующий вызов scanf():
scanf(“%d”, &count);
Во избежание ошибок при вводе из-за несовпадения форматов, можно пользоваться значением возвращаемым функцией scanf().
Например:
#include <stdio.h>
#include <clocale>
int main()
{
setlocale(LC_CTYPE,"Russian");
int x, flag = 0;
printf("Введите число ");
do{
flag = scanf("%d", &x);
if(flag != 1) {
puts("Вы попытались ввести не число,");
puts("попробуйте ещё раз");
fflush(stdin);
}
}while(flag != 1);
printf("Введённое Вами число %d\n", x);
return 0;
}