【问题标题】:Prevent endline after printing system time打印系统时间后防止尾线
【发布时间】:2013-01-17 00:21:09
【问题描述】:

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

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,我注意到了同样的结果。好像是系统在输出的末尾强制加了一个结束行,有没有,我可以抑制这个吗?

【问题讨论】:

  • 您可以使用更通用的strftime 和格式字符串"℅c"...

标签: c++ systemtime


【解决方案1】:

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

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

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

【讨论】:

  • 耶稣确实对我有用。我已将其修改为 -1,否则它正在吃掉 2013 年的 3。非常感谢,我需要等待计时器耗尽才能接受您的回答..
  • 另一个快速的问题,天哪,我怎样才能只访问毫秒部分的时间?
  • @c0d3rz 你应该使用 gettimeofday 它为你提供了一个微秒的结构时间。
【解决方案2】:

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

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

【讨论】:

  • 倒数第二个字符,最后一个字符应该是 \0 :P
  • @JesusRamos 是的,但是在执行例如strlen.
  • 你是对的,忘记了。我想到了原始分配长度:P
【解决方案3】:

如果你想使用字符串,你有更好的选择。

这对我有用:

#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

【讨论】:

    【解决方案4】:

    这将起作用:

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

    【讨论】:

    • 代码应该放在哪里?它应该替换现有的date = 分配,继续它还是其他什么?
    • 为什么要投反对票!!根据我们需要删除“\n”的问题,这就是发生自动换行符的原因。我们需要将日期存储为新字符串。
    • 您没有阅读问题。是的,这段代码假设用换行符替换日期。如果您不想将其存储到另一个字符串中。
    • 相反,您可以编写 date.pop_back() O(1) 解决方案。
    猜你喜欢
    • 2018-05-24
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    相关资源
    最近更新 更多