Ввод десятичных чисел с клавиатуры

В 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, значит было прочитано только одно число и т.д.) и при несовпадении указанных количеств организовать либо повторный ввод, либо вывод соответствующего сообщения и выход из программы, либо какую-то другую об-работку.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: