Раздел «Язык Си».OOP3-StructObj:

Структуры в языке С.

Примеры структуры и функций работы с ней (Простой пример работы со временем )

Предположим, что нужны операции с показаниями времени на 12-ти часовом циферблате.

// Описание структуры и ИНТЕРФЕЙСА функций 

// Структура для описания показаний часов
typedef struct{
  int h; // часы
  int min; // минуты
}CTime;

// установка часов в 0:0
void setTimeZero(CTime*);

// Инициализация объектов времени
// предполагается проверка введенных значений:
// если значения отрицательные - время устанавливаются в 0:0,
// в остальных случаях: минуты = значениеМинут % 60, 
// часы = (значениеЧасов + значениеМинут/60) % 12
void setTime(int, int);

// Преобразование к 12-часовому циферблату
CTime convertTo12(int h24, int min24);

// Печать показаний часов
void printTime(CTime){
  printf("%d:%d \n", a.h, a.min);
};

// Сложение времен:
CTime sumTime(CTime, CTime);

// Вычитание времен
// Вычисление промежутка времени между показаниями часов)
CTime diff(CTime);

// Сравнение двух показаний часов
// Если показания (относилельно циферблата) равны, возвращается 0,
// Если первый аргумент больше, возвращается 1,
// Если второй аргумент больше, то -1 
int cmp (CTime,CTime);


// Реализация функций

int main(){
  Time t1;
  Time t2={10,45};// инициализация структуры
  printTime(t1);
  printTime(t2);
}

void printTime(Time a){
  printf("%d:%d \n", a.h, a.min);
};
Компиляция программы и запуск:
>gcc time1.c -o time1
>./time1
4195728:0 
10:45 
>

Как видно из вывода, первый объект (переменная t1 ) не инициализирован, поэтому выводится «мусор» Значит необходимо либо устанавливать 0 для полей переменных вручную, либо использовать функцию установки полей переменных в 0 (setTimeZero()). К тому же, если просто присваивать значения полям переменнх, то есть вероятность получить недопустимые значения с точки зрения постановки задачи.

-- TatyanaOvsyannikova2011 - 06 Sep 2017