Ввод десятичных чисел с клавиатуры
В C для форматированного ввода данных с клавиатуры используется стандартная функция scanf. Эта функция позволяет вводить данные различных типов (числовых, символьных, строковых), однако сейчас ограничимся рассмотрением ввода только целых и вещественны десятичных чисел.
Первым параметром функции scanf является управляющая строка, а следующи-ми - указатели на вводимые переменные, то есть имена переменных с предшествующим знаком &. В управляющей строке указываются форматы ввода одной или парой букв по-сле знака %:
%d – для целых со знаком, %u – для целых без знака,
«Практикум по программированию на языке C в среде VS C++»
%f – для вещественных типа float, %lf – для вещественных типа double.
Например, если в программе есть переменные intk;
unsigned int j; float x;
doubley;
и требуется ввести их значения, то можно использовать оператор scanf("%d %u %f %lf",&k,&j,&x,&y);
Вводимые числа можно разделять пробелами или знаками табуляции, вводить од-ной строкой или несколькими строками (нажимая для перехода на очередную строку клавишу Enter), например, так
-25 | 5.71 1e-5 | |
или так | ||
-25 | ||
5.71 | ||
1e-5 |
В любом случае будет ожидание ввода значений всех переменных, представлен-ных параметрами функции scanf, а если набрано больше чисел, чем переменных в списке параметров, то оставшиеся не прочитанными будут сохранены для очередного ввода. Так подготовленные для ввода одной строкой числа
-25 77 5.71 1e-5
можно ввести несколькими, например двумя вызовами функции scanf, даже если они разделены другими операторами
scanf("%d %u",&k,&j);
…………
scanf("%f %lf",&x,&y);
В случае ошибки в наборе вводимых данных (появлении во входном потоке при вводе по числовым форматам не чисел и недопустимых разделителей между числами) работа программы не будет прервана. Это может оказаться причиной неверного резуль-тата работы программы, так как переменные из списка ввода функции scanf, не полу-чившие значений из входного потока, сохранят свои старые значения. Для обработки по-добных ошибок можно использовать различные приёмы, например,
1. вывод введённых чисел для визуального контроля:
«Практикум по программированию на языке C в среде VS C++»
scanf("%d %u %f %lf",&k,&j,&x,&y); printf("%d \t%u \t%g \t%g",k,j,x,y);
2. сравнение в программе с помощью операторов if или while (см. далее раздел «Программы разветвляющейся структуры» и «Программы циклической структуры») ко-личества переменных в списке ввода функции scanf, с количеством фактически прочи-танных из входного потока чисел, возвращаемым функцией (если оно 0, значит ошибка возникла до ввода первого числа, если 1, значит было прочитано только одно число и т.д.) и при несовпадении указанных количеств организовать либо повторный ввод, либо вывод соответствующего сообщения и выход из программы, либо какую-то другую об-работку.