从当前日期减去任意日期C ++

时间:2018-03-15 08:07:14

标签: c++ function date

我是C ++的新手。在我的编程I课程中,我作为期中考试获得了以下任务:

  

- 计算你活了多少天   (纪念时间从1970年1月1日起以秒存储)

     

出生年份,出生月份,出生日期间的命令行参数

现在,我已经找出函数本身实际上相互减去两个日期,并且我已经想出如何获取当前日期并将其粘贴在该函数中。我遇到的问题是如何获取用户的输入日期并将其发送到该功能。

我一直在使用“测试”代码片段来实现这一点,不幸的是,当我尝试编译它时,我只是得到了一些我根本不理解的错误,所以我很清楚做错了。

#include <iostream>
#include <ctime>

using namespace std;

struct tm a(int year, int month, int day)
{
    struct tm birth {0};

    cin >> year >> endl;
    cin >> month >> endl;
    cin >> day >> endl;

    birth.tm_year = year - 1900;
    birth.tm_mon = month;
    birth.tm_mday = day;

    return birth;
}

int main()
{
int year, month, day;

cout << "Enter a year, month, and day: " << endl;
cin >> year >> month >> day >> endl;

tm a(year, month, day);
time_t x = mktime(&a);
time_t y = time(0);
if ( x != (time_t)(-1) && y != (time_t)(-1) )
{
    double difference = difftime(y, x) / (60 * 60 * 24);
    cout << ctime(&x);
    cout << ctime(&y);
    cout << "difference = " << difference << " days" << endl;
}
return 0;
}

我已经尝试使用谷歌搜索其中的一些错误,我看到的结果一直在谈论“指针”。我不知道指针是什么,翻阅我们的教科书,它看起来像是我们现在所处的三到四章。前几天我试着向我的教授询问这件事,他只是咯咯笑着说了一句“嗯,是的,这就是期中考试的重点”。我不明白这是否意味着我应该自己弄清楚指针,或者我不应该使用它们。

我试图从用户在执行点输入的参数中获取一年,一个月和一天,并将它们粘贴到struct tm中,以便我的底部函数能够正常工作。

编辑:我发现我正在尝试将结构用作函数,这是错误的。我做了以下更改:

#include <iostream>
#include <ctime>

using namespace std;

struct tm bday(int year, int month, int day)
{
     struct tm r {0};

     r.tm_year = year - 1900;
     r.tm_mon = month;
     r.tm_mday = day;

     return r;
}

int main()
{
     int year, month, day;

     cout << "Enter a year, month, and day: " << endl;
     cin >> year >> endl;
     cin >> month >> endl;
     cin >> day >> endl;

     struct tm a = bday(year, month, day);
     time_t x = mktime(&a);
     time_t y = time(0);
     if ( x != (time_t)(-1) && y != (time_t)(-1) )
     {
          double difference = difftime(y, x) / (60 * 60 * 24);
          cout << ctime(&x);
          cout << ctime(&y);
          cout << "difference = " << difference << " days" << endl;
     }
     return 0;
}

现在编译时出现以下错误:

  

filename.cpp:22:17:错误:不匹配'运营商&gt;&gt;'

     

filename.cpp:23:18:错误:不匹配'operator&gt;&gt;'

     

filename.cpp:24:16:错误:不匹配'运营商&gt;&gt;'

1 个答案:

答案 0 :(得分:0)

这是不正确的:

 cin >> year >> endl;

您无法在endl中阅读任何内容。您可能会将输入与输出混淆,其中std::cout << x << std::endl;是常见模式。但是,作为旁注,您不需要在每行之后输出endlendl不仅会添加换行符,还会刷新流。如果您只想开始新行,请仅使用\n