Хелпикс

Главная

Контакты

Случайная статья





Функция scanf. Scanf(nf,&a1,&a2,.)



Функция 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, третью - в е.

Группа чисел

1 2 3
P=-3 N=-62.5 E=-3.510-3
J=4600 H=4.8103 Y=745000

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


 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.