Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Спецификаторы формата

Перед спецификаторами формата ввода ставится знак %, и они сообщают функции scanf() о типе далее читаемых данных. Эти спецификаторы перечислены в таблице. Спецификаторы формата рассматриваются слева направо, и в таком же порядке с ним сопоставляются аргументы из списка аргументов.

Таблица: Спецификаторы формата функции scanf()

Код

Значение

%c %d %i %е %f %g %о %s %x %р %n %u %[]

Читает одиночные символы Читает десятичное число Читает десятичное число Читает число с плавающей запятой Читает число с плавающей запятой Читает число с плавающей запятой Читает восьмеричное число Читает строку Читает шестнадцатиричное число Читает указатель Получает целочисленное значение, равное числу прочитанных символов Читает беззнаковое целое Сканирует множество символов

Ввод чисел

Традиционно для чтения десятичного числа используются спецификаторы %d или %i.

Для чтения числа с плавающей точкой, представленного в стандартной или научной нотации, используются %е, %f или %g.

Можно использовать scanf() для чтения целых чисел в восьмеричном или шестнадцатиричном формате, используя спецификаторы %о и %х соответственно. %х может быть записан как строчными, так и прописными буквами. При вводе шестнадцатиричных чисел можно вводить буквы от А до F как прописными, так и строчными. Следующая программа осуществляет ввод восьмеричного и шестнадцатиричного чисел: #include <stdio.h> int main(void) { int i, j; scanf("%о%х", &i,&j); printf("%o %x", i, j); return 0; }

Функция scanf() останавливает чтение чисел при обнаружении первого нечислового символа.

Ввод беззнаковых целых

Для ввода беззнаковых целых используется спецификатор формата %u. Например: unsigned num; scanf ("%u", &num); читает беззнаковое целое и помещает его значение в num.

Чтение отдельных символов с помощью scanf()

Как показано ранее, можно читать отдельные символы, используя функцию getchar() или ее производные. Для этих целей можно использовать scanf(), для чего надо указать спецификатор формата %с. Это справедливо и для Borland С++. Линейная буферизация делает применение функции scanf() не очень удобным в интерактивных средах.

Хотя пробелы, табуляции и новые строки используются как разделители полей при чтении других типов данных, при чтении отдельных символов специальные символы читаются так же, как и обычные символы. Например, при вводе «х у» фрагмент кода scanf ("%с%с%с", &а, &b, &с); вернет, символы х в а, пробел в b и у в с.

Чтение строк

Функция scanf() может использоваться для чтения строк из потока ввода, для чего надо указать спецификатор формата %s. %s заставляет функцию scanf() читать символы, пока не встретится специальный символ. Прочитанные символы помещаются в массив символов, на который указывает соответствующий аргумент, и результат завершается нулевым символом. Применительно к scanf() специальные символы - это пробел, новая строка, табуляция, вертикальная табуляция или перевод формата. В противоположность gets(), которая читает строку, пока не встретится возврат каретки, функция scanf() читает строку до первого специального символа. Это означает, что нельзя использовать scanf() для чтения строки типа «this is a test», поскольку первый пробел завершит процесс ввода. Для изучения эффекта воздействия спецификатора %s опробуем данную программу, введя строку «hello there»: #include <stdio.h> int main(void) { char str[80]; printf("Enter a string: "); scanf("%s", str); printf ("Here's your string: %s", str); return 0; } Программа выдаст только часть «hello» строки.

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