Предотвратить окончание после печати системного времени

У меня простой вопрос, если я хочу напечатать значение в той же строке, что и вывод моего системного времени, возможно ли это?

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, и я заметил тот же результат. Кажется, что система форсирует конечную строку в конце вывода, в любом случае, я могу подавить это?

3 ответа

Решение

Вы можете просто заменить символ '\n' в строке даты (если нулевое значение завершено, он должен быть в strlen(date) - 1) на '\0', и он должен печататься в той же строке.

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

РЕДАКТИРОВАТЬ: Как указал Иоахим strlen возвращает длину без терминатора NULL, а не необработанной длины выделения, поэтому она должна быть -1, а не -2.

Символ новой строки является последним символом в строке, возвращенной из asctime, Самый простой способ удалить его - заменить его символом конца строки '\0',

Примечание о Windows: в Windows есть два символа перевода строки, возврата каретки '\r' и очередной перевод строки '\n', Таким образом, в Windows вы должны заканчиваться на втором последнем символе. Если вы хотите, чтобы ваш код был переносимым между платформами Windows и не Windows, вы должны добавить проверки для этого.

Если вы хотите использовать строки, у вас есть лучшие альтернативы.

Это сработало для меня:

#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

Это будет работать:

date = date.substr(0, date.size()-1);
Другие вопросы по тегам