Лабораторная работа 3
Разнотипные переменные. Динамический и статический способы создания переменных
Варианты заданий
Разработать две функции, одна из которых вводит с клавиатуры набор данных в произвольной последовательности и размещает в памяти в переменном формате. Другая функция читает эти данные и выводит на экран. Программа запрашивает и размещает в памяти несколько наборов данных при помощи первой функции, а затем читает их и выводит на экран при помощи второй. Размещение данных производить в статическом массиве байтов фиксированной размерности с контролем его переполнения.
Вариант 7. Последовательность структурированных переменных типа struct man { char name[20]; int dd,mm,yy; char addr[]; }; Последняя компонента представляет собой строку переменной размерности, расположенную непосредственно за структурированной переменной. Конец последовательности - структурированная переменная с пустой строкой в поле name.
//---------------------------------------------------------------------------
#pragma hdrstop
//---------------------------------------------------------------------------
#include
#include
#include
typedef struct
{
char Name[20];
int dd,mm,yy;
char Addr[];
}MAN, *LPMAN;
void print(LPMAN buf, int len); // ввывод данных на экран
LPMAN create(); // ввод данных с клавиатуры
void printrus(char* format,...); // перекодировка в кириллицу
#pragma argsused
int main()
{
int i, len;
LPMAN q[20];
printrus("Введите данные с клавиатуры:\n");
i=0;
while(q[0]->Name != "")
{
q[i] = create();
if( q[i] == NULL ) break;
i++;
}
clrscr();
printrus("Результаты ввода:\n");
printrus("Имя:\tДата:\tАдрес\n");
printf("-------------------------------------------------------------------------------\n");
len = i;
for(i=0; i
printf("-------------------------------------------------------------------------------\n\n");
system("pause");
return 0;
}
//---------------------------------------------------------------------------
// вводим данные с клавиатуры
LPMAN create()
{
LPMAN p;
char str[200];
MAN q;
printrus("\tИмя: ");
fgets(&q.Name, 21, stdin);
if( q.Name[0] == '\n' ) return NULL;
q.Name[strlen(q.Name)-1] = 0;
printrus("\tДень: ");
fgets(&str, 4, stdin);
q.dd = atoi(str);
printrus("\tМесяц: ");
fgets(&str, 4, stdin);
q.mm = atoi(str);
printrus("\tГод: ");
fgets(&str, 4, stdin);
q.yy = atoi(str);
printrus("\tАдрес: ");
fgets(&str, 201, stdin);
p = malloc(sizeof(MAN) + strlen(str)+1);
strcpy(p->Addr, str);
strcpy(p->Name, q.Name);
p->dd = q.dd;
p->mm = q.mm;
p->yy = q.yy;
return(p);
}
//---------------------------------------------------------------------------
// выводим на экран результаты ввода
void print(LPMAN buf, int len)
{
printrus("%s\t\t", buf->Name);
printrus("%i.%i.%i\t", buf->dd, buf->mm, buf->yy);
printrus("%s\n", buf->Addr);
}
//---------------------------------------------------------------------------
// выводим на экран кириллицу
void printrus(char* format,...)
{
char buf[254];
va_list ptr;
CharToOem(format,buf);
va_start(ptr,format);
vprintf(buf,ptr);
}
//---------------------------------------------------------------------------
|