我有一个简单的问题,如果我想在与系统时间输出相同的行上打印一个值,这可能吗?
char *date;
time_t timer;
timer=time(NULL);
date = asctime(localtime(&timer));
//printf("Current Date: %s", date);
std::cout << date << ", " << randomNumber << std::endl;
if (file.is_open())
{
file << date;
file << ", ";
file << randomNumber;
file << "\n";
}
我希望会发生的是我会把它作为输出:
Wed Jan 16 16:18:56 2013, randomNumber
但我最终收到的文件是:
Wed Jan 16 16:18:56 2013
, randomNumber
另外,我刚做了一个简单的std :: cout,我注意到了同样的结果。似乎系统在输出结束处强制终止线,无论如何,我可以抑制它吗?
答案 0 :(得分:7)
你可以用'\ 0'替换日期字符串中的'\ n'字符(如果null终止它应该在strlen(date) - 1),它应该在同一行上打印。
date[strlen(date) - 1] = '\0';
编辑:正如Joachim所指出的strlen
返回的长度没有NULL终止符而不是原始分配长度所以它应该是-1而不是-2。
答案 1 :(得分:3)
换行符是asctime
返回的字符串中的最后一个字符。删除它的最简单方法是将其替换为字符串终止符'\0'
。
关于Windows的说明:Windows为换行符,回车符'\r'
和常规换行符'\n'
包含两个字符。因此,在Windows上,您必须在第二个最后一个字符处终止。如果您希望代码可以在Windows和非Windows平台上移植,则必须添加对此的检查。
答案 2 :(得分:0)
如果你想使用字符串,你有更好的选择。
这对我有用:
#include<iostream>
#include<chrono>
#include<ctime>
using namespace std;
string getDate()
{
chrono::system_clock::time_point tp = chrono::system_clock::now();
time_t t = chrono::system_clock::to_time_t(tp);
const char * tc = ctime(&t);
string str = string {tc};
str.pop_back();
return str;
}
int main(){
cout << getDate() << endl << hi;
}
输出:
Mon Dec 7 17:40:01 2015
hi
答案 3 :(得分:-1)
这将起作用:
date = date.substr(0, date.size()-1);