Функции консольного ввода-вывода cscanf() и cprintf()

Консольная библиотека <conio.h> имеет очень похожие функции ввода-вывода. Отличие состоит в том, что с помощью консольных функций можно задать атрибуты вводимых/выводимых символов: задать положение курсора, изменить цвета фона и символов. Поэтому, например, не имеет смысла использовать некоторые специальные символы при выводе данных на экран (перевод строки, горизонтальная табуляция и т.п.). Синтаксис функций cscanf() и cprintf() идентичен аналогичным функциям библиотеки <stdio.h>.

Вспомогательные функции консольной библиотеки

Рассмотрим вспомогательные «полезные» функциями консольной библиотеки, используемые вместе с функциями ввода-вывода:

1) очистка экрана

clrscr();

2) задание нового текущего положения курсора на экране

gotoxy(x,y);

где x, y – координаты нового положения курсора, диапазоны возможных изменения координат следующие x=1…80, y=1…25, координате (1,1) соответствует верхний левый угол экрана;

3) изменение текущего цвета символов (в текстовом режиме):

textcolor(c);

где c – цвет символов (с=0…15 или цвета в виде макроопределения, например, BLACK, BLUE, GREEN, RED,…YELLOW, WHITE);

4) изменение текущего звена фона под символами (в текстовом режиме):

textbackground(c);

где c – цвет фона (с=0…7 или цвета в виде макроопределения, например, BLACK, BLUE, …LIGHTGRAY);

Пример 3.2

Создадим программу ввода фамилии в окне. С помощью консольных функций необходимо выполнить следующие операции: очистить экран дисплея, в центре экрана вывести изображение окна (цветная рамка с желтым цветом символов и синим цветом фона) размером 20 столбцов на 3 строки, ввести строку в пределах окна.

       Листинг 3.2

/* Рисование окна и ввод фамилии */                        

#include <conio.h>

void main()

{

char name[15];/*объявление массива символов для ввода строки*/

clrscr();                 /* очистка экрана       */

textcolor(YELLOW);        /* задание цвета символов */

textbackground(BLUE);     /* задание цвета фона   */

gotoxy(30,11);            /* задание положения курсора */

cprintf(“┌────────────────────┐”);

gotoxy(30,12); 

cprintf(“│ Введите фамилию │”);

gotoxy(30,13); 

cprintf(“│               │”);

gotoxy(30,14); 

cprintf(“└────────────────────┘”);

textcolor(CYAN);          /* задание цвета символов */

gotoxy(35,13); 

cscanf(“%s”,name);        /* ввод строки          */

}

Примечание: для ввода программы необходимы символы псевдографики. При их вводе можно использовать коды символов:

218 ┌ 196 ─ 191 ┐

   

179 │  179 │

 

192 └ 196 ─ 217 ┘

Функция ввода одиночного символа getch()

Функции scanf() и cscanf() требуют аккуратного ввода данных с клавиатуры, незначительная ошибка при вводе информации приводит к сбоям в работе программ. В добротных программах используется посимвольный ввод данных с помощью функции getch(), определяемую в той же библиотеке <conio.h>. Эта функция имеет два варианта применения:

а) для остановки программы до нажатия произвольной клавиши, например, перед ее завершением. В этом случае листинг программы может быть таким

{

getch();        /* Ожидание ввода произвольной клавиши */

}

б) получение кода ASCII нажатой клавиши. Для получения кода клавиши необходимо объявить целую переменную и присвоить результат исполнения функции getch() этой переменной. При этом синтаксис использования функции может быть следующим:

{

int i;

i=getch();      /* Ожидание нажатия клавиши и присвоение

                   ее кода символа переменной i    */

}

Пример 3.3

Написать программу, принимающую символ с клавиатуры и выдающую его код на экран

       Листинг 3.3

/* программа вывода на экран кода нажатой клавиши */       

#include <conio.h>

void main()

{

int kod;                    /* объявление переменной */

clrscr();                   /* очистка экрана   */

cprintf(“Нажмите клавишу: ”); /* вывод сообщения  */

kod=getch();                /* ввод клавиши     */

cprintf(“\nКод клавиши: %d\n”); /* вывод кода клавиши */

getch();                    /* ожидание нажатия

                               произвольной клавиши */

}

Задание для самостоятельной работы

3.6.1. Записать отдельные строки программы, используя функции форматированного ввода-вывода:

а) вывод на экран двух переменных типа символ, целой переменной в восьмеричном формате и переменной типа длинное целое (идентификаторы выбрать самостоятельно);

б) вывод на экран значения переменных типа строка (массив символов) family, name, gruppa в следующем виде (после символов … должны идти значения указанных переменных):

Фамилия: …

Имя: …

Группа: …

в) вывести на экран две вещественные переменные в заданном формате: 10 позиций общая ширина поля переменной, 3 позиции – точность;

г) ввод двух переменных типа беззнаковое целое first и second;

д) ввод целой переменной x в шестнадцатеричном формате, вещественной переменной y и вещественной переменной двойной точности z;

е) выполнить ввод вещественных переменных power, moment и velocity, используя функции ввода-вывода в следующем формате (после символов … должен идти ввод указанных переменных):

Параметры двигателя:

мощность двигателя – …

момент двигателя – …

скорость двигателя – …

 

3.6.2. Записать отдельные строки программы, используя только функции консольного ввода-вывода:

а) очистить экран и далее вывести в центре экрана значения двух целых переменных
a и b, изменив при этом цвет символа и фона;

б) вывести значения четырех вещественных переменных a, b, c и d в следующем виде (ширина поля каждой переменной – 8 позиций, точность – 0 позиций):

a= …

b=…

c=…

d=…

в) выполнить предыдущий пример, но совмещенный с вводом значений этих переменных.

3.6.3. Написать программу: выполняется очистка экрана, вводится вещественное число, на экран выводится корень из введенного числа (функция корня находится в математической библиотеке и вызывается так: y=sqrt(x);). Вывод корня выполнить в следующем формате – выравнивание по левому краю, общая ширина поля – 10 позиций, точность – 2 символа после десятичной точки.  

3.6.4. Составить программу, в которой: выполняется очистка экрана, рисуется на экране изображение окна, внутри окна выполняется ввод трех параметров двигателя (см. задачу 3.6.1,е).

 

 




ОСНОВНЫЕ ОПЕРАЦИИ ЯЗЫКА

Операции языка Си

В языке существует большое количество операций (операторов). С помощью операций языка выполняются вычисления, сравнения, присваивания, а также ряд специфических задач. Наиболее часто используемые приведены в табл. 4.1. При выполнении операторов учитываются следующие особенности их исполнения:

а) каждой операции соответствует определенное количество операндов:

– унарные операции, имеющие только один операнд, например, операция взятия адреса переменной x запишется так: &x, а операция инкрементирования переменной i: i++;

– бинарные операции, имеющие два операнда, например, простейшие арифметические операции сложения, вычитания и т.д.: a+b или 4*x;

– единственная трехоперандная операция в языке – операция выполнения условия <операнд1>? <операнд2>: <операнд3>.

б) некоторые операции могут работать только с определенными типами данных, например, побитовые операции применяются только к целым типам данных;

в) в сложных выражениях, содержащих ряд операций, исполнение большинства операций выполняется слева направо, за исключением, унарных операций и операций присваивания. Если необходимо задать строго определенный порядок исполнения выражения можно использовать круглые скобки;

г) в сложных выражениях последовательность исполнения операций определяется их приоритетом (см. крайнюю правую колонку в табл. 4.1, где 1 – наибольший приоритет исполнения операции).

Таблица 4.1.

Опера-ция Назначение Пример Прио-ритет
  Первичные операции    
[] индекс массива x[2][0]=5; 1
() вызов функции, очередность выполнения y=sin(6.28*(x+1)); 1
. элемент структуры (прямой доступ) time.tm_hour=5; 1
-> элемент структуры (косвенный доступ) time->tm_hour=5; 1
  Унарные операции    
++ инкремент (увеличение на единицу) i++ 2
–– декремент (уменьшение на единицу) i–– 2
sizeof размер в байтах x=sizeof(int); 3
(тип) преобразование типа y=(float)5/2; 3
- унарный минус (изменение знака) y=-x; 3
* косвенная адресация int x=*y; 3
& взятие адреса scanf(“%d”,&x); 3
  Арифметические операции    
* умножение 20*x 4
/ деление x/10 4
% деление по модулю x%10 4
+ сложение x+20 5
вычитание 40–x 5
  Битовые операции    
~ побитовое НЕ y=~x; 3
<< побитовый сдвиг влево y=x<<1; 6
>> побитовый сдвиг вправо y=x>>1; 6
& побитовое И y=x&15; 9
^ побитовое исключающее ИЛИ y=x^15; 10
| побитовое ИЛИ y=x|15; 11

Продолжение таблицы 4.1.

Опера-ция Назначение Пример Прио-ритет
  Операции отношения    
< меньше if (x<6) 7
> больше if (x>6) 7
<= меньше или равно if (x<=6) 7
>= больше или равно if (x>=6) 7
== равно if (x==6) 8
!= не равно if (x!=6) 8
  Логические операции    
! логическое отрицание (операция НЕ) if (!x) 3
&& логическое умножение (операция И) if (x>0 && x<6) 12
|| логическое сложение (операция ИЛИ) if (x<0 || x>6) 13
  Условная операция    
?: при условии a>b?10;-10 14
  Операции присваивания    
= присваивание x=5 15
*= присвоение произведения x*=3 15
/= присвоение частного x/=3 15
%= присвоение остатка x%=3 15
+= присвоение суммы x+=3 15
–= присвоение разности x–=3 15
<<= присвоение левого сдвига x<<=3 15
>>= присвоение правого сдвига x>>=3 15
&= присвоение И x&=3 15
^= присвоение исключающего ИЛИ x^=3 15
|= присвоение ИЛИ x|=3 15
  Прочие операции    
, запятая a=1, b=2; 16


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



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