Функция scanf в языке C
Scanf – это процедура ввода общего назначения, позволяющая считывать данные из потока stdin. При помощи её могут считываться данные всех базовых типов языка.
Вызов scanf
Для того, чтобы считать 2 целых числа, вызов scanf происходит следующим образом:
scanf(«%d%d», &a, &b);
Где:
- %d — это спецификатор преобразования, читающий десятичное число
- a и b—переменные, куда записывается считываемое значение.
Ещё один пример вызова scanf:
scanf(«%d:%d»);
Здесь помимо спецификаторов %d, также использован символ «:».
Спецификаторы преобразования для функции scanf()
Первым символом в спецификаторах формата ввода является «%». Далее будут рассмотрены некоторые примеры таких спецификаторов:
- %% – Читает знак «%»
- %[] – Производит чтение набора сканируемых символов
- %a – Читает значение с плавающей точкой в шестнадцатеричной системе исчисления
- %c – Производит чтение одиночного символа
- %d – Производит чтение десятичного целого числа (тип int)
- %e, %f, %g – Читают числа с плавающей точкой
- %hd – Считывает короткое целое число (shortint)
- %hhd – Считывает десятичное число и записывает в переменную типа char
- %hhu – Считывает десятичное число без знака и записывает в переменную типа unsignedchar
- %hu – Считывает короткое целое число без знака (unsignedshortint)
- %i – Может читать числа и в десятичном, и в восьмеричном, и в шестнадцатеричном формате
- %lf – Считывается значение типа double
- %Lf – Считывается длинное вещественное число (тип longdouble)
- %n – Принимает значение, которое равное количеству считанных символов
- %о – Считывает число в восьмеричной системе
- %p – Считывает указатель (pointer)
- %s – Считывается последовательность символов без пробелов и записывается в тип char* или char[]
- %u – Производит чтение десятичного целого числа без знака (тип unsignedint)
Отличия scanf() от printf()
В языках Cи C++ есть ещё одна похожая на scanf()функция. Это printf(). Она в отличие от первой не считывает данные с потока stdin, а выводит их на экран в поток stdout. Здесь так же, как и в команде scanf()есть собственные спецификаторы (иначе они называются командами форматирования).
Чем же различаются printf() и scanf()? Кроме разного синтаксиса и того, что первая предназначена для вывода, а вторая – для ввода, можно ещё добавить, что в них ещё различается форма строк и функция scanf() возвращает значение, которое равно количеству считанных и записанных в параметры значений.
Примеры использования функции scanf()
Символ «*» в строке.
Знак «*», находящийся между «%» и спецификатором преобразования, считывает данные указанного типа, но подавляет их присваивание.
scanf («%d%*c%d», &х, &у);
Чтение нескольких символов в строке.
scanf («%20s», address);
Если необходимо считать не более, чем n символов в указанный массив, то можно использовать выражение “%ns”в строке, где n – это максимально допустимое количество считываемых символов.
scanf(«%с%с%с», &а, &b, &с);
Здесь вводятся 3 одиночных символа и присваиваются для 3 переменных.
Другие подобные функции в C / C++
Кроме функций printf и scanf в языках C и C++ также существуют и другие функции ввода/вывода.
Cin и cout предназначены для поточного ввода и вывода в языке C++. Для их использования нужно подключить дополнительную библиотеку <iostream>. Также эти функции находятся в именном пространстве “std”, поэтому нужно либо подключить его в начале приложения, либо прописать перед вызовом самих функций.
Код, приведённый ниже, в итоге даст один и тот же результат для ввода / вывода:
Вывод
Старый формат:
#include <stdio.h>
int main()
{
printf(«Hello World»);return 0;
}
Новый формат:
#include <iostream>
using namespace std;
int main()
{
cout<< «Hello World»;return 0;
}
Ввод
Старый формат:
#include <stdio.h>
int main()
{
int a, b;scanf(«%d%d», &a, &b);
return 0;
}
Новый формат:
#include <iostream>
using namespace std;
int main()
{
int a, b;cin>>a >> b;
return 0;
}
В C есть ещё и другие функции ввода / вывода. Среди них getchar()/putchar() и gets()/puts(). При помощи getchar() можно ввести один символ с клавиатуры. C помощью putchar() же можно вывести на консоль один символ. В то время, функции gets() и puts() позволяют ввести либо вывести строку.
Примеры кода с такими функциями
Getchar / putchar:
Код:int a;
a = getchar(); // вводим символ
printf(«%c «, a); // выводим его при помощи функции printf
putchar(a); // выводим её при помощи функции putchar
putchar(‘\n’);Вывод:u // результат вывода, используя printf
uu// результат вывода, используя putchar
Gets / puts:
char name[30];
char *nP;printf(«Введите имя и фамилию: «);
gets(name);// ввод строкиprintf(«Имя: «);
for(nP = name; *nP != ‘ ‘; nP++)
putchar(*nP);printf(«\nФамилия: «);
puts(nP+1);// вывод
Функция ввода / вывода в других языках программирования
Delphi / Pascal
В языках Delphi и Pascal для ввода данных в консоли используются функции read и readln. Первая только вводит текст, а вторая – вводит и вдобавок производит перенос строки. Для вывода текста используются write иwriteln. Окончание ‘ln’здесь значит то же, что и в readln, т.е. перевод на новую строку.
В языке Delphi в оконных приложениях также можно выводить текст при помощи сообщений. Сделать это можно процедурой ShowMessage или функцией MessageDlg. Для ввода же можно использовать InputBox().
Примеры кода:
read(а); // запись readс одной переменной
read(Cena,Kol); //запись readс двумя переменными
readln (а, В) ; // запись readln
write(‘Значение перем’);
write(‘енной:’); // использование функции write
ShowMessage(‘Сообщение’);// вывод в оконных приложениях Delphi№1
r := MessageDlg(“Дискриминант равен нулю’ + #13
+ ‘Уравнение не имеет действительных корней.’, mtInformation, [mbOK], 0);// вывод в оконных приложениях Delphi№2
S := InputBox(‘Фунты-килограммы’, ‘Введите вес в фунтах’, ‘’);// ввод в оконных приложениях Delphi
C#
В C# текст вводится при помощи команд ReadKey и ReadLine, которые считывают соответственно один символ либо целую строку. Выводятся данные командами Write и Writeline.
Примеры кода:
Console.ReadKey();
string name = Console.ReadLine();
Console.Write(«Введите свое имя: «);
Console.WriteLine(«Добро пожаловать в C#!»);
Java
В языке программирования Java для считывания данных используются методы next, nextInt, nextLine и некоторые другие. Метод next() считывает слово или фразу, которое ввёл пользователь, до тех пор пока не будет найден первый пробел.
Метод nextInt() считывает с консоли целое число. Метод nextLine() считывает строку до тех пор, пока не будет нажата клавиша «Enter». Для вывода в Java предназначены методы print, printf и println. Различаются они своим способом передачи информации на экран.
Print – это обычный вывод информации, println – это вывод информации + перенос строки, а printf – это форматированный вывод по аналогии с одноимённой функцией из языка C++. Перед методами вывода записывается выражение «System.out.». Означает оно, что перед вызовом этих методов мы обращаемся к статическому полю out из класса System.
Примеры кода:
String val=sc.next();
int val=sc.nextInt();
String val=sc.nextLine();
System.out.print(«Amigo «);
System.out.println(«is the best!»);
System.out.printf(«%4d», multiplyTab[i][j]);
Python
Чтобы ввести данные в языке Python используется функция input(). Для вывода данных используется функция print().
Примеры кода:
a = int(input())
print(5 + 10)