#include<iostream>
#include<ctime>
#include<string>
using namespace std;
int main()
{
string NowTime;
time_t now;
struct tm nowLocal;
now=time(NULL); // get the time from the OS
nowLocal=*localtime(&now);
NowTime = nowLocal.tm_hour + ':' + nowLocal.tm_min + ':' + nowLocal.tm_sec;
cout<< NowTime;
}
当我运行程序时,它什么也没显示,有人可以帮助我吗?我是编程方面的新手。
答案 0 :(得分:1)
如果您尝试
cout << nowLocal.tm_hour + ':' + nowLocal.tm_min + ':' + nowLocal.tm_sec;
你会看到一个整数,而不是一个类似时间的东西 这是因为它是五个整数的总和 - 将字符提升为整数,然后将它们全部加起来。
最简单的解决方法是根本不构建字符串,而是单独输出部分:
cout << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;
否则,您需要将这些数字转换为字符串:
NowTime = std::to_string(nowLocal.tm_hour) + ':' + std::to_string(nowLocal.tm_min) + ':' + std::to_string(nowLocal.tm_sec);
或者,您可以使用std::ostringstream
,其工作方式与std::cout
和其他流一样,但写入std::string
:
std::ostringstream ss;
ss << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;
NowTime = ss.str();
答案 1 :(得分:0)
该行:
NowTime = nowLocal.tm_hour + ':' + nowLocal.tm_min + ':' + nowLocal.tm_sec;
将小时,分钟和秒添加到冒号符号的数值,因为char被隐式强制转换为int。然后,该值将被解释为字符串赋值运算符中的char。
相反,您可以直接将值输出到cout
。它们将由cout
的流插入运算符<<
正确格式化。
#include<iostream>
#include<ctime>
#include<string>
using namespace std;
int main()
{
string NowTime;
time_t now;
tm nowLocal;
now=time(NULL); // get the time from the OS
nowLocal=*localtime(&now);
cout << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;
return 0;
}
如果您想将它们存储在字符串中,请阅读stringstreams。它们具有与cout
类似的语法,可以使格式化字符串更容易。
答案 2 :(得分:0)
不必将结果放在变量中,您可以像这样输出:
cout << nowLocal.tm_hour << ':' << nowLocal.tm_min << ':' << nowLocal.tm_sec;
另外,如果要保留变量,请执行以下操作:
NowTime = std::to_string(nowLocal.tm_hour) + ':' + std::to_string(nowLocal.tm_min) + ':' + std::to_string(nowLocal.tm_sec);
cout << NowTime;
答案 3 :(得分:0)
试试这个:
#include<iostream>
#include<ctime>
#include<string>
#include <sstream>
using namespace std;
int main()
{
string NowTime;
time_t now;
struct tm nowLocal;
now=time(NULL); // get the time from the OS
nowLocal=*localtime(&now);
stringstream s;
s<<nowLocal.tm_hour;
s<<":";
s<<nowLocal.tm_min;
s<<":";
s<<nowLocal.tm_sec;
NowTime = s.str();
cout<< NowTime;
}
你不能直接从int转换为字符串,你需要将值放入流然后转换为字符串。
答案 4 :(得分:0)
使用iostringstream构建你想要的字符串怎么样?
#include<iostream>
#include<ctime>
#include<string>
#include <sstream>
using namespace std;
int main()
{
ostringstream NowTime;
time_t now;
struct tm nowLocal;
now=time(NULL); // get the time from the OS
nowLocal=*localtime(&now);
NowTime << nowLocal.tm_hour << ":" << nowLocal.tm_min << ":" << nowLocal.tm_sec;
cout<< NowTime.str() << endl;
}
或者就你的程序而言,你可以简单地使用std :: cout,它也恰好是一个输出流。
cout << nowLocal.tm_hour << ":" << nowLocal.tm_min << ":" << nowLocal.tm_sec << endl;
答案 5 :(得分:0)
因为您看起来像是预先c ++ 11并且无法使用std::to_string
。这是一种类似C的方式,坚持使用您当前正在使用的包含。
#include<iostream>
#include<ctime>
#include<string>
using namespace std;
#define STR_LEN 128
int main()
{
string nowTime;
time_t now;
struct tm nowLocal;
now = time( NULL ); // get the time from the OS
nowLocal = *localtime( &now );
char hour[ STR_LEN ], min[ STR_LEN ], sec[ STR_LEN ];
sprintf( hour, "%d", nowLocal.tm_hour );
sprintf( min, "%d", nowLocal.tm_min );
sprintf( sec, "%d", nowLocal.tm_sec );
nowTime = string( hour ) + ':' + string( min ) + ':' + string( sec );
cout << nowTime << endl;
}