Инициализация структуры - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть такой код:
typedef struct Point3DStruct {
    int x;
    int y;
    int z;
} Point3D;
 
void myFunction1() {
    Point3D p0 = { 0, 1, 2 }, p1; // вроде ок
    
    switch(expr) {
    case 0:
        p1 = { 3, 4, 5 }; // нифига не ок
        break;
 
    case 1:
        p1 = { 6, 7, 8 }; // нифига не ок
        break;
 
    default:
        p1 = { 9, 8, 7 }; // нифига не ок
        break;
    }
 
    myFunction2(p1);
}
 
void myFunction2(const Point3D &point) { // опять чертовщина
    /* ... */
}
По первой функции вроде всё понимаю, но нифига не понимаю оно не компилируется... т.е. в Си нельзя сначала объявить структуру, а потом инициализировать? Тут только один выход - присваивать значения каждому полю? Или я чего-то не знаю?
case 0:
        p1.x = 3; p1.y = 4; p1.z = 5; // жесткач :[
        break;
Ну и по второй функции - я просто в ступоре то что мне нужно можно делать только через указатель 0_0 !?
void myFunction2(Point3D *point) {
    /* ... */
}
myFunction2(&p1);

Решение задачи: «Инициализация структуры»

textual
Листинг программы
#include <stdio.h>
 
typedef struct {
    int x;
    int y;
    int z;
} Point3D;
 
int expr;
 
void myFunction1();
void myFunction2(const Point3D *point);
 
int main(void)
{
    myFunction1();
    return 0;
}
 
void myFunction1()
{
    Point3D p0 = { 0, 1, 2 }, p1; // вроде ок
    scanf("%d", &expr);
    switch (expr) {
    case 0:
        p1 = (Point3D) { 3, 4, 5 }; // нифига не ок
        break;
 
    case 1:
        p1 = (Point3D) { 6, 7, 8 }; // нифига не ок
        break;
 
    default:
        p1 = (Point3D) { 9, 8, 7 }; // нифига не ок
        break;
    }
 
    myFunction2(&p1);
}
 
void myFunction2(const Point3D *point) { // опять чертовщина
    printf("x=%d y=%d z=%d", point->x, point->y, point->z);
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы сprintf и структурой Point3D
  2. Объявляем структуру Point3D, которая содержит три поля типа int (x, y, z)
  3. Объявляем переменную expr типа int, которая будет использоваться в операторе switch
  4. Объявляем две функции: myFunction1 и myFunction2. myFunction1 не принимает аргументов, а myFunction2 принимает указатель на структуру Point3D
  5. В функции main вызываем myFunction1
  6. В функции myFunction1 инициализируем структуру Point3D p0 значениями 0, 1, 2 соответственно
  7. Считываем значение переменной expr с помощью функции scanf
  8. Используем оператор switch для присвоения значения структуре p1 в зависимости от значения переменной expr
  9. В случае expr равно 0, присваиваем структуре p1 значения 3, 4, 5
  10. В случае expr равно 1, присваиваем структуре p1 значения 6, 7, 8
  11. В случае expr равно 2, присваиваем структуре p1 значения 9, 8, 7
  12. Вызываем функцию myFunction2, передавая ей указатель на структуру p1
  13. В функции myFunction2 выводим значения полей структуры Point3D на экран с помощью функции printf

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.714 из 5
Похожие ответы