Поля структуры
Поле структуры работает как обычная переменная: его можно читать, считать с ним и менять. Нужно лишь сказать, чьё это поле. bread.count — количество хлеба, а не молока. Эта программа меняет поля хлеба и считает с ними:
#include <stdio.h>
#include <string.h>
struct product {
char name[20];
double price;
int count;
};
int main(void) {
struct product bread = {"Bread", 32.5, 2};
bread.count = 3;
bread.price -= 2.5;
printf("%s: %d x %.2f = %.2f\n", bread.name, bread.count, bread.price, bread.count * bread.price);
strcpy(bread.name, "Rolls");
printf("%s: %d x %.2f\n", bread.name, bread.count, bread.price);
return 0;
}Программа выведет:
Bread: 3 x 30.00 = 90.00
Rolls: 3 x 30.00bread.count = 3; кладёт новое значение в поле count, а bread.price -= 2.5; снижает цену на 2,5. Остальные поля остаются прежними. Всё, что вы знаете о переменных, работает и с полями: +=, ++ или условие вроде if (bread.count > 0).
Текстовое поле — особый случай, ведь это массив, а присваивать массиву через = нельзя. Если вместо строки с strcpy написать bread.name = "Rolls";, программа не скомпилируется:
main.c:16:16: error: array type 'char[20]' is not assignable
16 | bread.name = "Rolls";
| ~~~~~~~~~~ ^Поэтому программа копирует текст через strcpy из string.h, как в любую строку. В массиве должно хватать места для нового текста и для '\0' в его конце: в char name[20] помещается до 19 латинских букв (русская буква занимает 2 байта, поэтому в таких полях в этом курсе используется только латиница).
Также следите за опечатками в именах полей. Компилятор знает только поля из определения, поэтому bread.prize заканчивается ошибкой, где сказано, что у структуры нет такого поля:
main.c:17:62: error: no member named 'prize' in 'struct product'
17 | printf("%s: %d x %.2f\n", bread.name, bread.count, bread.prize);
| ~~~~~ ^Задание
- 1
Герой игры сражается с драконом. Вместо комментария уменьшите
hero.healthна35через-=и увеличьтеhero.levelна единицу. Ниже снова выведите героя тем жеprintf, что и выше. Программа выведетZara: уровень 1, здоровье 100, а под нейZara: уровень 2, здоровье 65. - 2
За победу над драконом герой получает новое имя. В конце
main(передreturn 0;) скопируйте текстZara the Braveвhero.nameчерезstrcpy(добавьте#include <string.h>вверху) и выведите героя ещё раз. Последняя строка:Zara the Brave: уровень 2, здоровье 65.