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

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

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

1

Решение

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

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

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

6

Другие решения

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

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

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
0
По вопросам рекламы [email protected]