Другое

Функция scanf() в СИ: определение, примеры, применение, таблица

Lorem ipsum dolor

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

  • printf() отвечает за вывод;

  • scanf() отвечает за ввод.

О выводе информации при помощи функции printf() мы поговорим в следующих статьях, а на функции scanf() в Си остановимся поподробнее.

Функция scan() в Си

Функция scanf() считывает вводимые символы разного формата. При считывании она автоматически конвертирует вводимые данные в нужный программисту формат. По сути, scanf() является обратной функцией printf(). Шаблон «сканф» в Си выглядит так:

int scanf(“форматная строка“, «место для сохранения считанных значений») 

 

При помощи «форматной строки» разработчик задает инструкции для интерпретации вводимых данных. Форматная строка может состоять из 3-х типов символов:

  • преобразующий спецификатор — значение, задающее инструкции, плюс знак «%»;

  • специальный разделяющий символ — это «пробел» между несколькими спецификаторами;

  • не специальный символ.

Преобразующий спецификатор

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

Преобразующие спецификаторы имеют следующие значения:

  • «%а» чтение значения с «плавающей точкой»;

  • «%c» считывание одиночного символа;

  • «%d» чтение целого десятичного числа;

  • «%i» считывание чисел разных форматов: десятичного, восьмеричного, шестнадцатиричного;

  • «%e», «%f», «%g» чтение числа с «плавающей точкой»;

  • «%о» считывание восьмеричного числа;

  • «%s» чтение строки;

  • «%х» считывание шестнадцатеричного числа;

  • «%р» чтение указателя;

  • «%n» передать значение уже считанных знаков;

  • «%u» считывание целого десятичного числа, не беря во внимание знак;

  • «%[]» чтение всех отсканированных символов;

  • «%%» считывание знака «проценты».

Примеры использования scanf() в Си

Составим небольшую программку, которая будет считывать восьмеричные и шестнадцатеричные числа:

#include <stdio.h>

int main(void)

{

  int q, w;

  scanf(“%o%x“, &q, &w);

  printf (“% o %x“, q, w)

  return 0;

}

 

В этой программе при помощи спецификаторов «%o» и «%x» указали, какие значения нам необходимо считать. После считывания мы указали две переменные «q» и «w», куда будут сохраняться значения.

Чтение целого десятичного числа без учета знака:

    unsigned number;

    scanf(“%u“, &number);

 

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

  • пробел,

  • разделение строк, 

  • табуляция,

  • вертикальная табуляция,

  • и др.

Все, что функция scanf() считает до разделителя, поместится в специальный символьный массив. Программа в Си для чтения строки при помощи scanf(): 

#include <stdio.h>

int main(void)

{

  char str[100];

 

  printf("Напишите что-нибудь: ");

  scanf("%s", str);

  printf("Вот то, что вы написали: %s", str);

 

  return 0;

}

   

Если запустить такую программу, то scanf() не считает все, что напишет пользователь, а лишь первое слово. После первого слова последует «пробел», а после «пробела» scanf() прекращает свою работу. Поэтому если нужно получить от пользователя большеодного слова, тогда лучше применять функцию «gets()».

Функция scanf() в Си может применяться для арифметических операций. Например, в следующей программе мы сложим 2 вводимых числа:

#include <stdio.h> 

int main(void) {

  int x, y, result;

 

  scanf("%d", &x); // считать первое целое значение и адресовать его в переменную «x»

  scanf("%d", &y); // считать второе целое значение и адресовать его в переменную «y»

 

  result = x + y;  

  printf("%d + %d = %d\n", x, y, result);

  return 0;

}

 

Разница между scanf() и scanf_s() в Си

В функциональности этих функций нет никакой разницы, просто scanf() появилась в первых версиях языка С, поэтому считается менее защищенной. Обычно при работе со scanf() в современных компиляторах требуется наличие строки «#define _CRT_SECURE_NO_WARNINGS» в кодовом документе.

Либо можно применять усовершенствованную функцию scanf_s(), которая считается уже защищенной и не требует наличия вышеописанной строки.

Заключение

В программах информация не только выводится, но и принимается. Теперь вы знаете, что при помощи функции scanf() в Си можно принять любые данные, главное правильно обозначить спецификатор. Немного потренировавшись, вы поймете, что с функцией «сканф» в Си работать не сложнее, чем с функцией printf() в этом же языке.

Схожие статьи

Эффективная защита компьютера от взлома и несанкционированного копирования
Другое

Эффективная защита компьютера от взлома и несанкционированного копирования

Руководитель айти-отдела: как стать IT-директором в кратчайшие сроки?
Другое

Руководитель айти-отдела: как стать IT-директором в кратчайшие сроки?

Палиндром: определение и применение в разных языках программирования
Другое

Палиндром: определение и применение в разных языках программирования

Big Data: с чего начать и как освоить большие данные самостоятельно
Другое

Big Data: с чего начать и как освоить большие данные самостоятельно