简单的c++时间程序错误
simple c++ time program error
我在处理时间头,遇到了一个错误:
invalid conversion from 'tm*' to 'time_t'
当我尝试使用difftime函数时,您可以在下面的代码底部看到错误所在的位置。我知道我只是在做一些愚蠢和违法的事情,但我不知道我该怎么做。如果有人有解决方案,请告诉我。谢谢
该程序应该得到当前时间,从用户那里输入时间,然后找到时间差。
代码:
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
struct tm * cur_timeinfo_hold;
int year, month ,day,hour,minute,second;
double dif;
/* prompt user for time to be compared*/
printf ("Enter year: "); scanf ("%d",&year);
printf ("Enter month: "); scanf ("%d",&month);
printf ("Enter day: "); scanf ("%d",&day);
printf ("Enter hour: "); scanf ("%d",&hour);
printf ("Enter minute: "); scanf ("%d",&minute);
printf ("Enter second: "); scanf ("%d",&second);
/* get current timeinfo*/
time ( &rawtime );
timeinfo = localtime ( &rawtime );
/* print it */
printf("The present time is: "); printf(asctime (timeinfo));
/* set current time into a new variable to use for difftime, since timeinfo, will be changed */
cur_timeinfo_hold = timeinfo;
/* modify current timeinfo to the user's choice */
timeinfo->tm_year = year - 1900;
timeinfo->tm_mon = month - 1;
timeinfo->tm_mday = day;
timeinfo->tm_hour = hour;
timeinfo->tm_min = minute;
timeinfo->tm_sec = second;
mktime ( timeinfo );
/* and print it */
printf ("time to compare: "); printf(asctime (timeinfo));
/* find time difference */
//dif = difftime (cur_timeinfo_hold,timeinfo); //error: invalid conversion from 'tm*' to 'time_t'
return 0;
}
mktime
是一个函数。它接受一个参数tm
指针,并返回一个值time_t
。它不会将参数从一种类型转换为另一种类型。因此,在调用mktime(timeinfo)
之后,timeinfo
变量仍然是tm
指针。
difftime
函数期望接收两个time_t
值,因此它不会接受cur_timeinfo_hold
或timeinfo
;他们是错误的类型。第一个变量的值来自于将rawtime
转换为具有localtime
的tm
指针,因此将其用于第一个参数。当您稍后调用mktime(timeinfo)
时,它返回了一个time_t
值,但您忽略了返回值。将返回值分配给一个变量,以便将其用于第二个difftime
参数。
time_t info = mktime(timeinfo);
// ...
dif = difftime(rawtime, info);
difftime
需要原始的time_t
值,而不是struct tm
结构。
原型是:
double difftime(time_t time1, time_t time0);
您需要做的是保持系统时间不变(不执行localtime
),然后使用mktime
将用户输入的信息正确地转换为等效的time_t
(如果使用UTC时间,则为timegm
)。
然后您可以使用difftime
来获得差异。实际上,类似于:
time_t base, other;
struct tm tms;
double delta;
time (&base); // basetime is now.
tms.blah = blah; // for all blahs.
other = mktime (&tms); // get time_t for other time.
delta = difftime (other, base); // get difference.
相关文章:
- C++程序错误:malloc():内存损坏
- C++ Windows 凭据提供程序错误屏幕
- 程序错误地读取了二进制文件的一个字节
- Cmake无法在qt-creater/collect2上编译简单的测试程序:错误:ld
- C 程序错误
- SDL 应用程序错误:“if”之前应为非限定 id
- C++程序错误
- Apache IGNITE编译ODBC驱动程序错误
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- Cygwin1.dll c++ 应用程序错误
- 无法编译任何C++程序;错误:未知类型名称'uint8_t'
- 带有结构和指针的程序错误(结构,C++)
- 矩阵运算C++运算符重载程序错误
- ilmerge后C /CLI应用程序错误
- SDL 2.0-无效的呈现程序错误
- 如何使用 C# 在网页 asp.net 显示 C 程序错误
- OPENCV:image_proc中的 PCA 应用程序错误
- C++程序错误 - 虚拟析构函数
- LNK2020 C 程序错误
- 程序错误,由于在VS2010中使用std::unique_ptr