Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Расчет длительности в днях промежутка времени между двумя датами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ структуры http://www.cyberforum.ru/cpp-beginners/thread176173.html
задание: 1)Написать структуру Train, содержащую следующие поля: название пункта назначения номер поезда время отправления 2) ввод с клавиатуры данных в массив, состоящий из шести элементов...
C++ scanf. Разбиение. Помогите с задачей. Не могу додуматься как это сделать: С клавиатуры вводится следующий набор символов: AGENT007:1234567.25 В программе определены три переменные: типов int i, long l и float f.... http://www.cyberforum.ru/cpp-beginners/thread176171.html
C++ Не получается обнаружить ошибку(метод Шелла)
Проблема в том что я написала программу на паскале,а преподаватель попросил перевести на си,и теперь не могу понять где эта ошибка,выводит не тот результат,я даже по шагово проделывала,где то...
C++ Утечка памяти в работе с классами
вроде утечка памяти наблюдается в функции "loadfromfile", помогите пожалуйста исправить #include "stdafx.h" #include <windows.h> #include <stdlib.h> #include <iostream> using namespace std;
C++ Ввести имена и телефоны сотрудников организации в массив записей и вывести их в виде таблицы. http://www.cyberforum.ru/cpp-beginners/thread176156.html
Запись содержит несколько компонентов, или полей, которые могут иметь различные типы. Синтаксис: Record Поля; Поля; ... Поля End; Замечания:
C++ одномерные массивы Помогите, пожалуйста, сделать задание, ну хотя бы намекните! В одномерном массиве, который состоит из n действительных чисел, найти сумму элементов между первым и последним нулевыми элементами. В... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
14.10.2010, 00:33
С названиями месяцев не стал морочиться, а если числами даты задавать, то вот:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
    
#define MAX(a, b) (a) > (b) ? (a) : (b)
#define MIN(a, b) (a) < (b) ? (a) : (b)
    
int ask_error(const char * msg){
    char answ;
    printf("%s\nContinue? (y/n) > ", msg);
    if ( scanf("%c%*c", &answ) != 1 ){
        perror("scanf");
        return 1;
    }
    return ( answ != 'y' && answ != 'Y' );
}
 
int check_date(struct tm * d){
    if ( d->tm_mday < 1 || d->tm_mday > 31 )
        return 1;
    d->tm_mon -= 1;
    if ( d->tm_mon < 0 || d->tm_mon > 11 )
        return 1;
    if ( d->tm_year < 0 )
        return 1;
    if ( d->tm_year < 37 )
        d->tm_year += 2000;
    else if ( d->tm_year < 100 )
        d->tm_year += 1900;
    if ( d->tm_year > 2036 || d->tm_year < 1970 )
        return 1;
    d->tm_year -= 1900;
    d->tm_min = 1;
    return 0;
}
 
int main(void){
    struct tm date1, date2;
    time_t time1, time2;
    
    while ( 1 ){
        memset(&date1, 0, sizeof(struct tm));
        memset(&date2, 0, sizeof(struct tm));
        
        printf("\nFirst date: ");
        if ( scanf("%d%*c%d%*c%d%*c", &date1.tm_mday, &date1.tm_mon, &date1.tm_year) != 3 ){
            if ( ask_error("Wrong input!") )
                break;
            continue;
        }
        if ( check_date(&date1) ){
            if ( ask_error("Wrong date format!") )
                break;
            continue;
        }
        
        printf("Second date: ");
        if ( scanf("%d%*c%d%*c%d%*c", &date2.tm_mday, &date2.tm_mon, &date2.tm_year) != 3 ){
            if ( ask_error("Wrong input!") )
                break;
            continue;
        }
        if ( check_date(&date2) ){
            if ( ask_error("Wrong date format!") )
                break;
            continue;
        }
        
        if ( ( time1 = mktime(&date1) ) == -1 ){
            perror("first date mktime");
            exit(1);
        }
        if ( ( time2 = mktime(&date2) ) == -1 ){
            perror("second date mktime");
            exit(1);
        }
        
        printf("Days between: %d\n", (int)(difftime(MAX(time1, time2), MIN(time1, time2)) / 60.0 / 60.0 / 24.0));
        
        if ( ask_error("") )
            break;
    }
    
    exit(0);
}
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru