Урок 1. Часть 3: Инструкции языка Си scanf, gets, getchar — ввод данных

На занятии рассматривается инструкции языка Си scanf, gets, getchar, предназначенные для ввода информации

Функция языка Си gets

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

Функция Си gets() помещает в переменную вводимую строку. В качестве параметра функции указывается имя переменной, в которую и помещается строка.

Пример: в программе функция gets() рассматривает первые 14 символов (один элемент необходим для нулевого символа, поэтому в скобках следует указывать на один символ больше) и помещает введенную строку в переменную name; затем выводит ее значение на экран
main()
{
char name[15];
puts(“введите имя”);
gets(name);
puts(name);
}
Показать аналог в Pascal

var name:string;
begin
     writeln('введите имя');
     readln(name);
     writeln(name);
end.

Функция языка Си getchar

Функция Си getchar() запрашивает с клавиатуры единичный символ и практически для всех компиляторов безразлично, к какому типу (char или int) относится данный символ.

Вызов функции getchar осуществляется другим способом. Параметра у нее нет, но указать круглые пустые скобки после имени функции надо обязательно. Вызов происходит как присваивание какой-то переменной значения функции. Т.е. слева указывается переменная и ей присваивается значение функции, указанной справа.

Пример: в программе запрашивать ввод символа, после чего выводить его на экран при помощи функций Си putchar и ptintf
#include <stdio.h>
main()
{
int bukva;
puts("введите букву");
bukva=getchar();
putchar(bukva);
putchar('\n');
printf("%c", bukva);
}
Важно: для работы данной функции скорее всего потребуется подключение заголовочного файла stdio.h

Для сравнения выполним ту же задачу с функцией Си gets():

main()
{
char bukva;
puts("введите букву");
gets(bukva);
printf("%s", bukva);
}

Функция языка Си scanf

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

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

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

Указатели формата аналогичны тем, которые используются функцией printf.

Пример: функция scanf() вводит вещественное число и и присваивает его переменной amount (вносит его в область памяти, предназначенную для переменной)
main()
{	
	float amount;
	scanf("%f", &amount)
}
Показать аналог в Pascal

var amount:real;
begin
     readln(amount)
end.
Важно: Когда компилятор доходит до функции scanf(), выполнение программы приостанавливается, и программа ожидает ввода данных. Как только будет нажата клавиши Enter, будет продолжено выполнение кода программы.
Задание C 1_3_1: Объясните, почему следующая программа написана неправильно:

main()
{
	char initial;
	initial = gets();
	puts(initial);
}
Задание C 1_3_2: Напишите программу, которая выводит имя и возраст субъектов. Добавьте функцию printf(), которая выводила бы значения переменных:

...
char name[12];
int age;
...
Вопросы для самоконтроля:

  • Есть ли необходимость нажимать клавишу Enter после ввода с использованием функции getchar()?
  • Назовите два способа использования функции getchar().
  • Какие преимущества дает использование функции scanf()?