Функция форматированного ввода scanf()
Функция форматированного ввода scanf() имеет следующий синтаксис:
scanf(форматная строка, аргумент_1, аргумент_2,…);
Форматная строка – последовательность спецификаторов, заключенных в двойные кавычки, которые начинаются знаком % . Точность, ширина, флаги в спецификаторах не указываются
аргумент_1, аргумент_2,… – это адреса переменных, куда должны вводиться числа после преобразования.
scanf(“%d”,&a); // ввод значения целой переменной а.
scanf(“%f”,&g); // ввод значения вещественной переменной g.
scanf(“%d %d”,&a,&b); // ввод значений целых переменных а и b.
Функция scanf() принимает с клавиатуры все символы до нажатия клавиши Enter и помещает их в буфер. Затем по форматной строке определяется способ преобразования этих символов, и полученное число помещается в ячейку с адресом, соответствующим данной переменной.
Если между спецификаторами поставить любой другой символ, то при вводе информации надо вводить также этот символ
scanf(“%d,%d”,&a,&b); //нужно вводить значения целых переменных а и b через запятую.
Количество спецификаторов должно совпадать с количеством адресов вводимых переменных. Если число спецификаторов меньше количества адресов переменных, то лишние адреса игнорируются. Если число спецификаторов больше адресов переменных, то результат ввода не предсказуем.
Особенности форматированного ввода строки
Функция scanf() позволяет вводить с консоли строковые константы и переменные. В этом случае используется спецификатор формата %s .
char str[20];
scanf(“%s”,str); // ввод строки не более 20 символов
Особенность этого спецификатора в том, что с его помощью функция scanf() передает в программу все символы только до первого разделителя, в том числе и пробела.
Если во вводимой информации встретился пробел, то в буфер попадут все символы и после пробела, вплоть до нажатия клавиши Enter , а в программу только символы до пробела.
При следующем использовании функции scanf() оставшиеся в буфере символы вновь будут обрабатываться. В результате в программу могут попасть нежелательные значения переменных.
Во избежание таких случаев после функции scanf() рекомендуется использовать функцию очистки буфера fflush(stdin).
Например:
scanf(“%s”,str);
fflush(stdin);
Неформатированный ввод-вывод
В языке С имеется стандартные функции неформатированного ввода-вывода символов и строк: getchar(), putchar(), gets(), puts().
Функция getchar() не имеет аргументов и возвращает целое число, соответствующее вводимому символу.
Для ввода с клавиатуры переменной, например, char d;, в программе следует записать d=getchar(); При вводе символа надо нажать клавишу Enter .
Для вывода символа на экран используется функция putchar(аргумент), где аргумент представляется в виде целого числа.
#include <stdio.h>
void main ()
{int d;
d=getchar();
putchar(d);
putchar(‘\n’);
}
В заголовочном файле conio.h описаны функции getch() – ввод символа без эха, getchе() – ввод символа с эхом. Эти функции позволяют вводить символы без нажатия клавиши Enter .
Функция putch() осуществляет вывод символа на экран монитора. С помощью функции putch() можно выводить специальные символьные константы ‘\a’, ‘\n’, ‘\t’, ‘\r’. Например:
#include <conio.h>
void main ()
{int cd;
cd=getch(); //введем символ g без нажатия клавиши Enter , на экране не будет ничего
putch(cd); // на экране получим g
cd=getche(); // введем символ w , на экране получим w .
putch(cd); // на экране получим еще один символ w .
putch(‘\n’); // перевод на начало следующей строки
}
