Читайте также:
|
|
Предназначена для ввода данных в заданном формате. Обращение имеет вид:
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
Дата добавления: 2015-07-25; просмотров: 59 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Флаг][ширина][.точность][размер]тип | | | Предмет и задачи курса |