Написать функцию для вычисления интервала времени в секундах между двумя моментами, находящимися внутри двенадцатичасового цикла - C (СИ)
Формулировка задачи:
Напишите функцию, которая воспринимает как три целых аргумента (часы, минуты и секунды) и возвращает количество секунд, прошедших со времени, когда часы в последний раз показали 12. Используйте эту функцию для вычисления интервала времени в секундах между двумя моментами, находящимися внутри двенадцатичасового цикла.
такой вариант программы не запускается. Что не так?
#include <stdio.h>
#include <windows.h>
int seconds(int chas, int min,int sec);
int main() {
int a1,b1,c1,a2,b2,c2,z;
printf("Введите 2 момента времени 3 числами (часы минуты секунды 1 момента, а потом 2ого)");
scanf("%d%d%d",&a1,&b1,&c1);
scanf("%d%d%d",&a2,&b2,&c2);
z=seconds(a1,b1,c1)-seconds(a2,b2,c2);
if (z<0) z=-z;
printf("Между ними прошло %d часов %d минут и %d секунд",z/3600,(z%3600)/60,z%60);
system("PAUSE");
return 0;
}
int seconds(int chas, int min,int sec)
{
if (chas>=12) chas=chas-12;
return (chas*3600+min*60+sec);
}Решение задачи: «Написать функцию для вычисления интервала времени в секундах между двумя моментами, находящимися внутри двенадцатичасового цикла»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
typedef struct {
unsigned hour;
unsigned min;
unsigned sec;
} Time;
int getTime(FILE* stream, Time* time) {
return (fscanf(stream, "%u:%u:%u", &time->hour, &time->min, &time->sec) == 3);
}
unsigned getSeconds(const Time* time) {
return time->sec + (time->min * 60) + ((time->hour % 12) * 60 * 60);
}
unsigned diffTime(const Time* first, const Time* second) {
unsigned tmFirst = getSeconds(first);
unsigned tmSecond = getSeconds(second);
return (tmFirst < tmSecond) ? (tmSecond - tmFirst) : (tmFirst - tmSecond);
}
int main() {
Time first, second;
printf("input first and second time (h:m:s): ");
if (getTime(stdin, &first) && getTime(stdin, &second)) {
fprintf(stdout, "seconds = %u\n", diffTime(&first, &second));
}
else {
fprintf(stderr, "error input ...\n");
}
system("pause");
return 0;
}