|
||||||||||||||
Функция scanf. Scanf(nf,&a1,&a2,.) ⇐ ПредыдущаяСтр 5 из 5 Функция scanf
Предназначена для ввода данных в заданном формате. Обращение имеет вид: Scanf(nf,&a1,&a2,...) Здесь nf - форматная строка; &a1,&a2,... - список ввода - указатели на значения вводимых переменных a1, a2, ..... Примечание. Указатель на значение переменной - это адрес этой переменной, а не ее текущее значение. Чтобы указать на адрес переменной, надо перед именем переменной поставить символ операции &. Например, &dозначает адрес переменной d, а не значение, которое эта переменная имеет в данный момент. Т. о., если надо ввести значения переменных, например, a, b, c, то в списке ввода следует записать &a, &b, &c - указатели на значения переменных. Выполняя функцию scanf(nf,&a1,&a2,...), программа приостанавливает свою работу и ждет от пользователя ввода последовательности символов. После ввода запрашиваемой информации следует нажать клавишу Enter (курсор перейдет к началу следующей строки экрана). Функция scanf прекращает прием символов во внутренний буфер и переходит к обработке ввода в соответствии с форматной строкой. При этом, по спецификации %s функция scanf передает в программу все символы до первого разделителя, в том числе и пробела. Оставшиеся в буфере символы будут поступать в программу при следующих обращениях к функции scanf. Поэтому перед очередным обращением к функции scanf выполняется очистка буфера stdin фукцией ffluch(stdin). Пример 3. Ввести целое положительное двузначное число i1 и целое отрицательное трехзначное число i2. Вывести в одну строку i1, i2 без разделителя, затем "пробел" и число i2. В следующую строку вывести i2, прижатое к левому краю поля в 7 позиций, "пробел", i2, прижатое к правому краю поля в 7 позиций, "пробел", i1 в поле из 5 позиций с выводом нулейв левые лишние позиции поля, "пробел", i1 в поле из 5 позицийсо знаком "+", "пробел", i2 в поле длиной 5 с пробелом вместо знака "+", "пробел", i2 в одну позицию, "пробел", i1 - в 4 позиции. /* Форматированный ввод-вывод целых чисел */ #include <stdio.h> #include <conio.h> main() { int i1,i2; clrscr(); printf("Введите положительное и отрицательное целые числа\n"); scanf("%i %d",&i1,&i2); printf("Числа %d и %d в разных форматах:\n",i1,i2); printf("*********\n"); printf("%d%i %d\n%-7i %7d %05d %+5d % 5d %1d %4i\n", i1,i2,i2, i2, i2, i1, i1, i1, i2,i1); printf("******* ******* ***** ***** ***** * ****\n"); fflush(stdin); getchar(); return(0); } Ниже приводится вид экрана (окна Output) после выполнения программы (серым цветом выделены данные, введенные пользователем):
Введите положительное и отрицательное целые числа 12 -567 Числа 12 и -567 в разных форматах: ********* 12-567 -567 -567 -567 00012 +12 12 -567 12 ******* ******* ***** ***** ***** * ****
Пример 4. /* Форматированный ввод-вывод */ #include <stdio.h> #include <conio.h> main() { int i1,i2,i3; char c1, s1[10]; float f1,e1; clrscr(); printf("Введите 3 целых числа\n"); scanf("%d%i%d",&i1,&i2,&i3); printf("Введены числа:\n%d %d %i\n",i1,i2,i3); fflush(stdin); printf("Введите символ, число, строку, число\n"); scanf("%c %f %15s %e",&c1,&f1,&s1,&e1 ); printf("Введены:\n"); printf(" символ %c\n число %7.3f\n строка %15s\n число %10.2e\n", c1, f1, s1, e1); fflush(stdin); getchar(); return(0); }
Ниже приводится вид экрана (окна Output) после выполнения программы (серым цветом выделены данные, введенные пользователем): Введите 3 целых числа 55 -4 3 Введены числа: 55 -4 3 Введите символ, число, строку, число r -5.1 qwert 0.00356 Введены: символ r число -5.100 строка qwert число 3.56e-03 Если ввести строку, содержащую пробел, то выведена будет только часть строки до пробела. Вторая часть строки будет преобразована в соответствии со спецификацией %10.2e в числовое значение 2.76e-40 и присвоена переменной e1, что и отображено в окне Output: Введите символ, число, строку, число к -5.1 qwe rt 0.00356 Введены: символ к число -5.100 строка qwe число 2.76e-40
Пример 5. С помощью операторов ввода - вывода 1) ввести и напечатать числовые значения переменных. Первую группу чисел представить в спецификации i (или d), вторую - в f, третью - в е.
2) выдавать на экран соответствующие подсказки, вводить перечисленные в условии данные, а затем печатать введенную информации с необходимыми пояснениями: марка материала (до 8 символов), температура начала штамповки в 0С, минимальная и максимальная температура конца штамповки в 0С (два числа), дата ввода данных, фамилия пользователя. /* Пример для лабораторной работы №2 */ #include <stdio.h> #include <conio.h> main() { int P,J,T,TN,TK; float N,H,E,Y; char M[8],D[10],F[20]; puts("Введите два целых числа"); scanf("%d %d",&P,&J); puts("Введите четыре вещественных числа"); scanf("%f %f %f %f",&N,&H,&E,&Y); printf("Введите марку материала (до 8 символов) "); fflush(stdin); gets(M); fflush(stdin); puts("Введите температуру начала штамповки"); scanf("%d",&T); puts("Введите минимальную и максимальную температуры конца штамповки"); scanf("%d %d",&TN,&TK); fflush(stdin); ‑ puts("Введите текущую дату"); _ gets(D); _ puts("Введите свою фамилию"); _ gets(F); _ puts("Были введены:"); _ printf("Целые числа P=%2d J=% 4d\n",P,J); _ printf("Вещественные числа N= %5.2f H= %e E= %e Y= %f\n",N,H,E,Y); _ printf("Марка материала: %s\n",M); _ printf("Температура начала штамповки: %d град.C\n",T); printf("Мин. и макс. температуры конца штамповки: %d град.C %_%d град.C %\n", TN,TK); printf("Работу выполнил %s %s\n",F,D); _ fflush(stdin); _ getchar(); _ return(0); _ } _ _ Функцииatoi, atol, atof Часто программисты избегают пользоваться функцией scanf. Если данные, прочитанные с помощью scanf, не соответствует форматной строке, то функция может вести себя непредсказуемо. Можно вводить данные с помощью функции gets. Данные представляются в виде строки. Затем нужно вызвать функцию atoi, atol или atof для преобразования строки в целое, длинное целое или вещественное число, соответственно. Указанные функции содержатся в файле stdlib.h Пример 6. /* Пример использования функций atoi и atof */ #include <conio.h> #include <stdlib.h> main() { char s1[10], // Строка для целого числа s2[20]; // Строка для вещественного числа int i; float f; printf("Введите целое число "); gets(s1); printf("Введите вещественное число "); gets(s2); i=atoi(s1); // Преобразование строки в целое число f=atof(s2); // Преобразование строки в вещественное число printf("i=%d f=%f\n",i,f); fflush(stdin); getchar(); return(0); } Результат выполнения программы (серым цветом выделены введенные пользователем строки): Введите целое число -231 Введите вещественное число 0.035647 i=-231 f=0.035647
|
||||||||||||||
|