我有一个项目需要我接受输入(在同一天,我假设)一个作业到期。我试图从一个类似的问题中遵循一些代码,但它给了我一个错误,我假设它与time_t和int值有关。这是我的代码:
#include <iostream>
#include <ctime>
using namespace std;
int main() {
int hour_input,min_input;
cout << "What hour is your assignment due?\n";
cin >> hour_input;
cout << "What minute is your assignmnet due?\n";
cin >> min_input;
struct tm* tm;
time_t ts = time(NULL);
long int delta;
tm->tm_hour = hour_input;
tm->tm_min = min_input;
delta = mktime(tm) - ts;
delta += 24*60*60;
cout << "There are "<< delta << " minutes until your assignment is due!\n";
return 0;
}
我正在寻找的是如何正确使用<ctime>
标题中的功能的一些指导,感谢您的帮助!
答案 0 :(得分:1)
double deltaMinutes = difftime(later,earlier) / 60.0;
我将每次struct初始化为当前日期。注意,1970年在成员tm :: tm_year中由70指定。
答案 1 :(得分:1)
第一个错误是你创建一个指向struct tm
但没有指向任何东西的指针。你不需要指针:
struct tm tm;
/* set fields */
time_t timestamp = mktime(&tm);
第二个错误是mktime
期望结构中有完整的数据/时间。如果年,月和日都为零,则返回的时间将是第一年,月和日。该呼叫实际上可能失败,因为日期必须介于1和31之间。
这意味着使用struct tm
来区分差异并不容易。而是按照Sam的建议使用difftime
。
答案 2 :(得分:0)
从代码中删除显着位(并且声明的顺序非常奇怪)
struct tm* tm;
tm->tm_hour = hour_input;
tm->tm_min = min_input;
delta = mktime(tm) - ts;
因此,tm未初始化并指向随机位置。此外,您没有正确填写结构,并且您有一个随机(可能无效)的年,月,日和秒。
mktime会尝试使其有效,但如果秒数足够大,则会对您的小时和分钟造成严重破坏。假设程序在达到目标之前没有崩溃。你没有说出你得到了什么错误。