КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Многие представления данных используют указатели на структуру в качестве своих полей (списки, например)
Использование указателя на структуру в качестве параметра функции позволяет изменять значения элементов структуры. Она использует особенности функции scanf,которая игнорирует символы пробела и новой строки. Если ее не записать, то после ввода цены в буфере ввода останется символ новой строки и при следующем чтении названия книги первым символом будет символ новой строки и программа закончит работу, несмотря на то, что будет попытка набрать название новой книги. В программе есть странная строка Второе условие проверяет не заполнили ли весь массив. Определяет конец работы цикла, константа STOPописывает пустую строку, т.е. строку, в которую ничего не ввели, только нажали enter. В программе условие While Массив структур типа book Массив из 3 элементов Librys[4].title[0]-верно!!! ибо это 1-ый символ названия 5-ой книги Но Инициализация массива структур book lib[]={ {”Обрыв”,”Н.А.Гончаров”,40000.0}, {”Овод”,”Э.Л.Войнич”,35000.0}, {”Идиот”,”Ф.М.Достоевский”,45000.0}; Пример. Обработаем массив книг. #include <stdio.h> #include <string.h> const int MAXTIT=41; const int MAXAUT=31; const int MAXBOOKS=100; const char STOP[] ="\0"; struct book { char title[MAXTIT]; char author[MAXAUT]; float value; }; int main() { book libry[MAXBOOKS]; int count=0; int i; printf("название книги или enter для завершения\n"); (strcmp(gets(libry[count].title), STOP)!=0 && count< MAXBOOKS) {printf("автор книги\n"); gets(libry[count].author); printf("цена книги\n"); scanf("%f",&libry[count++].value); while(getchar()!='\n'); //очистка if (count< MAXBOOKS) printf ("название книги или enter для завершения\n"); } printf("Список книг\n"); for(i=0;i<count;i++) printf("%s, %s:%f\n", libry[i].title, libry[i].author, libry[i].value); return 0; } (strcmp(gets(libry[count].title),STOP)!=0 && count< MAXBOOKS) while(getchar()!='\n');//очистка Вложенные структуры Иногда удобно вкладывать структуры друг в друга: const int dl=20, dl1=50; struct fio{ char fam[dl]; char imya[dl]; char otch[dl]; } struct anketa{ fio person;//вложенная структура char prof[dl]; char adres[dl1]; } Инициализация переменной такого типа: anketa individ = { {”Иванов”,”Сергей”,”Петрович”}, ”врач”,”г.Минск,ул.Гая,д.2,кв.4”}; Доступ к полям такой структуры: individ.person.fam //”Иванов” individ.person.imya //”Сергей” Указатели на структуры Удобства применения указателей: · Указателями часто легче пользоваться, чем самими структурами (напр, в задачах сортировки);
Для доступа к полям структурной переменной через указатель используется оператор «->» (минус больше): rd.code, rd.region); prd->name, prd->code, prd->region); Передача структур в функции void int_emp(person*r, int m, char *s, char *rg) Объединения (union)
Дата добавления: 2014-01-07; Просмотров: 353; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |