Функция как член структуры - C (СИ) (75338)

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

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

Нужно сделать функцию-член структуры, которая считает значения переменных, входящих в эту структуру. Вот что я имею:
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    struct numbers {
        int x;
        int y;
        int SumNum (struct numbers mystruct) {
            return (mystruct.x+mystruct.y);
        };
    }massnum[5];
 
    FILE *fp;
    int i;
    //чтение
    if ((fp = fopen("numbers.txt", "rb")) == NULL) {
        printf("Ошибка при открытии файла!");
        return 0;
    }
    for (i = 0; i<5; ++i) {
        if (fread(&massnum[i], sizeof(struct numbers), 1, fp) != 1) {
            if (feof(fp)) break;
            printf("Ошибка при чтении файла!");
        }
    }
    fclose(fp);
    printf("%d", massnum[2].SumNum(massnum));
    return 0;
}
Если имеются идеи или разобраные похожие предметы - поделитесь.

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

textual
Листинг программы
#include <stdio.h>
 
struct point {
    int x, y;
    void (*println)(struct point*);
};
 
void println_point(struct point* p){
    printf("[%d, %d]\n", p->x, p->y);
}
 
int main() {
    struct point p1 = { 10, 20, &println_point };
    p1.println(&p1);
 
    return 0;
}

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

  1. Включаем заголовочный файл stdio.h для использования функций вывода
  2. Создаем структуру point с полями x и y типа int и указателем на функцию void (println)(struct point)
  3. Определяем функцию println_point которая принимает указатель на структуру point и выводит значения полей x и y через printf
  4. Создаем переменную p1 типа struct point с полями равными 10 и 20 и указателем на функцию println_point
  5. Вызываем функцию println_point передавая в качестве аргумента адрес переменной p1
  6. Завершаем программу и возвращаем 0

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


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

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

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