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

Выход

Функция, используемая C для записи данных в выходной файл stdout (стандартный поток вывода), называется printf(). Функция printf() принимает несколько параметров. Одним из них является строка формата, последовательность символов в двойных кавычках (« »), которая определяет способ отображения данных. Строка формата может содержать простые символы (которые отображаются так, как они отображаются на экране), экранированные последовательности или спецификаторы преобразования.
В дальнейшее обследование имеем:

Escape-последовательности
Escape-последовательности используются либо для перемещения курсора в другую позицию на экране, либо для отображения определенного значения. Как и во многих языках программирования, чтобы использовать escape-последовательность, нам нужно использовать символ обратной косой черты перед желаемой последовательностью. Вот диаграмма с escape-последовательностями, используемыми в C.

Пример:

printf("Hello World\n"); //without the use of escape charaters

printf("\"Hello World\""); //with the use of escape characters the quotes will be visible

Выход:

Hello World
"Hello World"

Спецификаторы преобразования
Спецификаторы преобразования используются для определения типа данных, на которые мы ссылаемся, когда хотим что-то распечатать (или отсканировать ввод, как мы увидим позже). Чтобы использовать спецификатор преобразования, нам нужно использовать символ % перед желаемым спецификатором. Вот диаграмма со спецификаторами преобразования в C.

Пример:

int num = 4;
printf("%d", num);

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

Пример:

char chr = 'A';
int num = 4;
printf("My favorite letter is %c and my favorite number is %d\n", chr, num);

Выход:

My favorite letter is A and my favorite number is 4

Примечание. В дополнение к спецификаторам есть также некоторые модификаторы. Добавив цифру между символом «%» и спецификатором формата, мы можем определить минимальную ширину текстового поля.

Пример:

printf("%3d\n", 1);
printf("%3d\n", 12);
printf("%3d\n", 123);

Выход:

  1
 12
123

Помещая точку вместо цифры и символы «e» (для цифр перед e в числе экспоненциального формата) или «f» (для цифр с плавающей запятой), мы указываем цифры точности числа с плавающей запятой. Та же концепция используется и в строках. Если мы хотим напечатать строку, мы можем легко определить количество отображаемых символов, следуя той же методике.
Пример:

printf("%.2f\n", 4.0);
printf("%.3e\n", 93.335623);
char msg[] = "A message to output";
printf("%s\n", msg);
printf("%.9s\n", msg); //only printing the frist 9 characters

Выход:

4.00
9.334e+01
A message to output
A message

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

Пример:

int num = 96;
printf("%-4d\n", num);
printf("%+4d\n", num);
printf("% d\n", num);
printf("%#0x\n", num);
printf("%#o\n", num);
printf("%04d\n", num);

Выход:

96  
 +96
 96
0x60
0140
0096

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

(data_type) (variable);

Пример:
Мы можем временно изменить «внешний вид» целого числа, чтобы оно выглядело как число с плавающей запятой. Он по-прежнему остается объявленным целым числом, но имеет десятичные точки.

int num1 = 90;
float num2;
num2 = (float)num1;
printf("The num1 is %d and the num2 is %f", num1, num2);

Выход:

The num1 is 90 and the num2 is 90.000000

Вход

функция, используемая C для получения данных от пользователя и передачи их во входной файл, также известный как stdin (стандартный поток ввода), называется scanf().
Точно так же, как printf (), scanf() также принимает список параметров. Аналогичным образом, первый параметр — это строка формата, которая, как и прежде, определяет тип вводимых данных. Чтобы прочитать значение переменной, сначала должна существовать переменная. Поэтому мы должны получить значения для переменных, которые уже были объявлены, чтобы избежать возможных ошибок. Ниже мы можем увидеть основной синтаксис функции scanf().
Примечание. Когда программа достигает команды scanf(), она приостанавливает свою работу и ждет ввода данных пользователем. После ввода значения пользователю необходимо нажать клавишу Enter/Return, чтобы программа сохранила ввод и возобновила свою последовательность выполнения.

data_type variable;
scanf("%data_specifier", &variable); //sometimes we skip the '&' character

Примечание. Перед переменной, которую мы хотим сканировать, мы помещаем символ «&», который называется оператором адреса. Это используется для сохранения входного значения по адресу памяти переменной. Оператор адреса пропускается, когда мы читаем строки. Точная причина этого будет обсуждаться далее в курсе об указателях. Короче говоря, строки — это массивы символов. Имя массива также считается первым адресом его первой ячейки. Таким образом, нет необходимости в адресном операторе.

Пример:

int num;
printf("Please enter a numberd:");
scanf("%d", &num); //let's say that we enter the number 54
printf("You entered the number %d", num);

Выход

Please enter a number:54
You entered the number 54

Пример:

char name[30];
printf("Enter your name:");
scanf("%s", name); //let's say we enter John
printf("Hello %s, nice to meet you!", name);

Выход:

Enter your name:John
Hello John, nice to meet you!

Примечание. Функция scanf() останавливает чтение ввода после получения пробела/пустого символа. Например, если мы попытаемся напечатать целое предложение в одной строке ввода, оно не будет правильно отсканировано. В частности, предположим, что мы хотим ввести предложение Привет, мир, это Дженис. Фактический ввод, который будет получен из этого предложения, будет Hello . Есть несколько советов и приемов, позволяющих обойти эту проблему, но я больше всего рекомендую вообще не использовать функцию scanf(). Вместо этого используйте другую функцию под названием gets(), специально предназначенную для чтения строк. НО цель этого курса — познакомить вас с основными функциями ввода и вывода. Давайте сейчас сосредоточимся на функции scanf(), а о рискованной gets() мы поговорим позже. Чтобы прочитать несколько слов в одной строке, нам нужно использовать следующую форму scanf().

scanf("%[^\n]", str_array);

Примечание. Как мы можем прочитать несколько входных значений одновременно? Допустим, мы хотим ввести два числа для двух отдельных переменных одновременно. Мы просто размещаем нужные спецификаторы преобразования один за другим без каких-либо разделяющих символов. Если мы поместим разделительный символ между ними, очень важно вводить тот же символ при чтении данных, чтобы наша программа работала правильно. Например:

int num1, num2;
printf("Please enter 2 numbers:");
scanf("%d %d", &num1, &num2); //let's say we enter 1 2
printf("Your numbers are num1=%d and num2=%d", num1, num2);

Выход:

Please enter 2 numbers:1 2
Your numbers are num1=1 and num2=2

С другой стороны:

int num1, num2;
printf("Please enter 2 numbers:");
scanf("%d , %d", &num1, &num2); //let's say we enter 1 2
printf("Your numbers are num1=%d and num2=%d", num1, num2);

Выход:

Please enter 2 numbers:1 , 2
Your numbers are num1=1 and num2=2

Примечание. Вместо символа «,» мы можем ввести все, что хотим, в качестве разделительного множителя.

Примечание. Функция scanf() считывает символ новой строки (‘\n’) ввода при следующем вызове. Это означает, что новый символ строки будет регистрироваться каждый второй вызов. Например:

first call for number
\nsecond call for number
\nthird call for number

Но что произойдет, если мы захотим прочитать один символ при четвертом вызове? Функция scanf() будет считывать только «\n» и пропустит остальные данные. Это можно решить, просто прочитав сначала символ. Не самое удобное решение, но самое простое.

В следующей статье мы обсудим операторы в C.

Если вам понравилась эта статья, вы можете купить мне кофе, он же топливо для программистов!