|
|||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Функция стандартного ввода scanf()Функция scanf() – функция форматированного ввода. С её помощью вы можете вводить данные со стандартного устройства ввода (клавиатуры). Вводимыми данными могут быть целые числа, числа с плавающей запятой, символы, строки и указатели. Функция scanf() имеет следующий прототип в файле stdio.h: int scanf(char *управляющая строка); Функция возвращает число переменных которым было присвоено значение. Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Спецификаторы формата начинаются с символа %. Спецификаторы формата представлены в табл. 5. [2] Таблица 5. Спецификаторы формата для функции scanf()
При вводе строки с помощью функции scanf() (спецификатор формата %s), строка вводиться до первого пробела!! т.е. если вы вводите строку "Hello word!" с использованием функции scanf() char str[80]; // массив на 80 символов scanf("%s",str); то после ввода результирующая строка, которая будет храниться в массиве str будет состоять из одного слова "Hello". ФУНКЦИЯ ВВОДИТ СТРОКУ ДО ПЕРВОГО ПРОБЕЛА! Если вы хотите вводить строки с пробелами, то используйте функцию char *gets(char *buf); С помощью функции gets() вы сможете вводить полноценные строки. Функция gets() читает символы с клавиатуры до появления символа новой строки (\n). Сам символ новой строки появляется, когда вы нажимаете клавишу enter. Функция возвращает указатель на buf (buf – буфер (память) для вводимой строки). Пример 12. /* Example 12 */ #include <stdio.h> #include <conio.h> void main(void) { char buffer[100]; // массив (буфер) для вводимой строки gets(buffer); // вводим строку и нажимаем enter printf("%s",buffer);// вывод введённой строки на экран getch(); } Ещё одно важное замечание! Для ввода данных с помощью функции scanf(), ей в качестве параметров нужно передавать адреса переменных, а не сами переменные. Чтобы получить адрес переменной, нужно поставить перед именем переменной знак &(амперсанд). Знак & означает взятие адреса. Что значит адрес? В программе у имеется переменная. Переменная хранит своё значение в памяти компьютера. Адрес, который получается с помощью & это адрес в памяти компьютера где храниться значение переменной. Пример 13. /* Example 13 */ #include <stdio.h> #include <conio.h> void main(void) { int x; printf("Enter the value x:"); scanf("%d",&x); printf("The Value x=%d",x); getch(); } Вернёмся к управляющей строке функции scanf(). Ещё раз: int scanf(char *управляющая строка); Символ пробела в управляющей строке дает команду пропустить один или более пробелов в потоке ввода. Кроме пробела может восприниматься символ табуляции или новой строки. Ненулевой символ указывает на чтение и отбрасывание этого символа. Разделителями между двумя вводимыми числами являются символы пробела, табуляции или новой строки. Знак * после % и перед кодом формата (спецификатором формата) дает команду прочитать данные указанного типа, но не присваивать это значение. Например: scanf("%d%*c%d",&i,&j); при вводе 50+20 присвоит переменной i значение 50, переменной j - значение 20, а символ + будет прочитан и проигнорирован. В команде формата может быть указана наибольшая ширина поля, которая подлежит считыванию. Например: scanf("%5s",str); указывает необходимость прочитать из потока ввода первые 5 символов. При вводе 1234567890ABC массив str будет содержать только 12345, остальные символы будут проигнорированы. Разделители: пробел, символ табуляции и символ новой строки – при вводе символа воспринимаются, как и все другие символы. Если в управляющей строке встречаются какие-либо другие символы, то они предназначаются для того, чтобы определить и пропустить соответствующий символ. Поток символов 10plus20 оператором scanf("%dplus%d",&x,&y); присвоит переменной x значение 10, переменной y – значение 20, а символы plus пропустит, так как они встретились в управляющей строке. Одной из мощных особенностей функции scanf() является возможность задания множества поиска (scanset). Множество поиска определяет набор символов, с которыми будут сравниваться читаемые функцией scanf() символы. Функция scanf() читает символы до тех пор, пока они встречаются в множестве поиска. Как только символ, который введен, не встретился в множестве поиска, функция scanf() переходит к следующему спецификатору формата. Множество поиска определяется списком символов, заключённых в квадратные скобки. Перед открывающей скобкой ставиться знак %. Пример 14. /* Example 14 */ #include <stdio.h> #include <conio.h> void main(void) { char str1[10], str2[10]; scanf("%[0123456789]%s", str1, str2); printf("\n%s\n%s",str1,str2); getch(); } Введём набор символов: На экране программа выдаст: При задании множества поиска можно также использовать символ "дефис" для задания промежутков, а также максимальную ширину поля ввода. scanf("%10[A-Z1-5]", str1); Можно также определить символы, которые не входят в множество поиска. Перед первым из этих символов ставиться знак ^. Множество символов различает строчные и прописные буквы. Напомню, что при использовании функции scanf(), ей в качестве параметров нужно передавать адреса переменных. Выше был написан код: char str[80]; // массив на 80 символов scanf("%s",str); Обратите внимание на то, что перед str не стоит символ &. Это сделано потому, что str является массивом, а имя массива – str является указателем на первый элемент массива. Поэтому знак & не ставиться. Мы уже передаем функции scanf() адрес. Ну проще говоря str это адрес в памяти компьютера где будет храниться значение первого элемента массива. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.) |