Структуры в языке С.
Примеры структуры и функций работы с ней (Простой пример работы со временем )
Предположим, что нужны операции с показаниями времени на 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