在打印系统时间后防止结束行

问题描述 投票:2回答:4

我有一个简单的问题,如果我想在系统时间输出的同一行上打印一个值,可以吗?

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,我注意到了相同的结果。看来系统会在输出的末尾强制使用一条终点线,无论如何,我可以禁止它吗?

c++ systemtime
4个回答
8
投票

您只可以用'\ 0'替换日期字符串中的'\ n'字符(如果终止为null,则应在strlen(date)-1处,并且应该在同一行上打印。

date[strlen(date) - 1] = '\0';

编辑:正如Joachim strlen指出的那样,返回没有NULL终止符的长度而不是原始分配长度,因此它应该是-1而不是-2。


3
投票

换行符是asctime返回的字符串中的最后一个字符。删除它的最简单方法是用字符串终止符'\0'替换它。

关于Windows的注意事项:Windows的换行符,回车符'\r'和常规换行符'\n'具有two个字符。因此,在Windows上,您必须在second最后一个字符处终止。如果要使代码在Windows和非Windows平台之间可移植,则必须为此添加检查。


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

0
投票

日期= date.substr(0,date.size()-1);

这会工作..

© www.soinside.com 2019 - 2024. All rights reserved.