Статьи

Ввод и вывод данных в C, часть 1

Язык C сопровождается набором библиотечных функций, который включает в себя ряд функций ввода / вывода. Эти функции используются для передачи информации между компьютером и стандартным устройством ввода / вывода. Основные функции ввода / вывода: getcharputcharputsscanfprintf Первые две функции, getcharputchar, Следующая функция putsscanfprintf

Доступ к функции ввода / вывода можно получить из любого места в программе, просто написав имя функции, за которым следует список аргументов, заключенный в скобки. Аргументы представляют элементы данных, которые отправляются в функцию. Некоторые функции ввода / вывода не требуют аргументов, хотя пустые скобки все равно должны появляться.

Имена тех функций, которые возвращают элементы данных, могут появляться в выражениях, как если бы каждая ссылка на функцию была обычной переменной (например, c=getchar();scanf(...); Некоторые функции не возвращают никаких элементов данных. На такие функции ссылаются, как если бы они были отдельными операторами (например, putchar(...);

C включает в себя набор заголовочных файлов, которые предоставляют необходимую информацию для поддержки различных функций библиотеки. Каждый файл обычно содержит информацию в поддержку группы связанных библиотечных функций. Эти файлы вводятся в программу с помощью оператора #include Как правило, файл заголовка, требуемый стандартными функциями библиотеки ввода / вывода, называется stdio.h.

Ввод одного символа: функция getchar

Функция getchar Он возвращает один символ со стандартного устройства ввода (обычно клавиатуры). Функция не требует никаких аргументов, хотя пара пустых скобок должна следовать за словом getchar

В общем, ссылка на функцию будет записана как:

 character variable = getchar( );

где символьная переменная относится к некоторой ранее объявленной символьной переменной.

Если при чтении символа с функцией getcharконца файла , значение символической константы EOF (Это значение будет назначено в файле stdio.h. Как правило, EOF будет присвоено значение -1). Таким образом, обнаружение EOF Соответствующие корректирующие действия могут быть предприняты.

Функция getchar

Вывод одного символа: функция putchar

Отдельные символы могут отображаться с помощью функции библиотеки Си putchar Эта функция дополняет функцию ввода символов getchar

Функция putchargetchar Он передает один символ на стандартное устройство вывода (экран компьютера). Передаваемый символ будет представлен как символьная переменная. Он должен быть выражен как аргумент функции, заключенный в скобки, после слова putchar

В общем, ссылка на функцию будет записана как:

 putchar(character variable)

где символьная переменная относится к некоторой ранее объявленной символьной переменной.

Простой пример, демонстрирующий использование getcharputchar

 #include<stdio.h>

int main()

{

char c;

printf("n Please enter a character:");

c=getchar();

printf("n The character entered is: ");

putchar(c);

return 0;

}

В приведенной выше программе оператор c=getchar(); принимает введенный пользователем символ и сохраняет его в переменной c Введенный пользователем символ может быть любым из набора символов C. Утверждение putchar(c); печатает символ, хранящийся в переменной c

Функция putchar Каждый символ может быть написан отдельно в цикле. Наиболее удобный способ сделать это — использовать оператор for, который мы обсудим в будущем.

Ввод входных данных: функция scanf

Входные данные могут быть введены со стандартного устройства ввода с помощью функции C библиотеки scanf Эта функция может использоваться для ввода любой комбинации числовых значений, отдельных символов и строк. Функция возвращает количество элементов данных, которые были успешно введены.

В общих чертах функция scanf

 scanf(control string, arg1, arg2,.........,argN) 

где управляющая строка относится к строке, содержащей определенную требуемую информацию о форматировании, а arg1, arg2,…, argN являются аргументами, представляющими отдельные элементы данных. (На самом деле аргументы представляют собой указатели, которые указывают адреса элементов данных в памяти компьютера. Мы обсудим указатели более подробно в следующей статье, но до тех пор было бы полезно запомнить тот факт, что аргументы в функции scanf

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

Наиболее часто используемые символы преобразования перечислены ниже:

  Символ преобразования Тип данных входных данных

 персонаж с

 D десятичное целое

 е значение с плавающей запятой

 f значение с плавающей точкой

 г значение с плавающей запятой

 ч короткое целое

 я десятичное, шестнадцатеричное или восьмеричное целое

 восьмеричное целое

 x шестнадцатеричное целое

 Строка с

 беззнаковое десятичное целое число

 [.  ,  .] строка, которая может содержать пробельные символы 

Аргументы функции scanf Каждому имени переменной должен предшествовать амперсанд (&) . Однако имена символьных массивов не начинаются с амперсанда. Фактические значения аргументов должны соответствовать аргументам в функции scanf

Если введено два или более элементов данных, они должны быть разделены пробельными символами. Элементы данных могут продолжаться в две или более строки, поскольку символ новой строки считается символом пробела и поэтому может разделять последовательные элементы данных.

Пример 1:

 #include<stdio.h>

int main()

{

char a[20];

int   i;

float b;

printf(" n Enter the value of a, i and b");

scanf("%s %d %f", a, &i, &b);

return 0;

}

В вышеприведенной программе в функции scanfстрока управления имеет значение "%s %d %f" Он обозначает трехсимвольные группы или спецификаторы формата. Первый спецификатор формата %sa%di%fb

Также обратите внимание, что единственным аргументом, которому не предшествует амперсанд (&), является aa

Символ преобразования s-типа применяется к строке, оканчивающейся символом пробела . Поэтому строка, содержащая пробельные символы, не может быть введена таким образом. Для этого есть два способа:

1. Символ преобразования s-типа заменяется последовательностью символов, заключенной в квадратные скобки, обозначенной как [. , .]. Пробельные символы также включены в строку, чтобы можно было прочитать строку, содержащую пробельные символы.

При выполнении программы последовательные символы будут считываться до тех пор, пока каждый входной символ совпадает с одним из символов, заключенных в квадратные скобки. Порядок символов в квадратных скобках не обязательно должен соответствовать порядку вводимых символов. Как только встречается вводимый символ, который не совпадает ни с одним из символов в скобках, функция scanf Нулевой символ будет автоматически добавлен в конец строки.

Пример:

 #include<stdio.h>

int main()

{

char line[80];

scanf(" %[  ABCDEFGHIJKLMNOPQRSTUVWXYZ]", line);

printf("%s", line);

return 0;

}

Если входные данные:

ЧИТАЯ СТРУНУ С БЕЛЫМИ ПРОСТРАНСТВАМИ

тогда все данные будут присвоены line Однако, если ввод:

Чтение строки с пробелами

тогда только буквы в верхнем регистре (R, A, S, W, S) будут назначены строке, так как все символы в строке управления находятся в верхнем регистре.

2. Для ввода строки, содержащей пробельные символы, а также символы верхнего и нижнего регистров, мы можем использовать округлый знак, то есть (^) , за которым следует символ новой строки в скобках.
Пример:

 scanf("[^n]", line);

Из-за окружности последующие символы в квадратных скобках интерпретируются противоположным образом. Таким образом, при выполнении программы символы будут считываться до тех пор, пока символ новой строки не встречается.

Чтение чисел: указание ширины поля

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

Пример: если ab

 scanf( "%3d %3d", &a, &b);

и если входные данные: 1 4

тогда ab

Если входными данными является 123 456, то a=123b=456

Если ввод 1234567, то a=123b=456 7 игнорируется.

Если ввод 123 4 56 (пробел вставлен ошибкой ввода), то a=123b=4 Это потому, что пространство действует как разделитель элементов данных.

Подавление назначений

За знаком % следует звездочка (*), чтобы пропустить элемент данных, не назначая его указанной переменной или массиву.

Пример:
scanf( "%s %*d %f", a, &i,&b);

Если ввод: Алиса 12 34,5, то a=Aliceb= 34.5 Однако 12iсимвол подавления назначения .

Приставки

Некоторым символам преобразования в управляющей строке может предшествовать префикс; например, l или L, чтобы указать длинный целочисленный аргумент, и h, чтобы указать короткий целочисленный аргумент. Поэтому «% ld» будет указывать на длинное целое число.

В следующей статье будут обсуждаться функции printfputs