#c #iostream
#c #iostream
Вопрос:
я пытаюсь создать программу, которая записывает временную метку в файл с помощью c , вот мой код :
#include <time.h>
#include <iostream>
#include <unistd.h>
#include <fstream>
using namespace std;
int main()
{
fstream outfile;
outfile.open("time.txt",ios::out|ios::app);
string savetime;
for(;;){
time_t t = time(NULL);
savetime=asctime(localtime(amp;t));
cout<<savetime;
outfile << savetime << endl;
sleep(1);
}
}
результат этого кода
Sun Dec 06 01:28:17 2020
Sun Dec 06 01:28:18 2020
Sun Dec 06 01:28:19 2020
Sun Dec 06 01:28:20 2020
в каждой строке есть новая строка. я попытался удалить endl
at outfile << savetime << endl;
, чтобы удалить новые строки, но файл не сохранит новую временную метку. моя цель — сделать вывод следующим образом
Sun Dec 06 01:28:17 2020
Sun Dec 06 01:28:18 2020
Sun Dec 06 01:28:19 2020
Sun Dec 06 01:28:20 2020
заранее спасибо.
Комментарии:
1. Цитирование страницы документации cppreference для
asctime
: Преобразует заданное календарное время std::tm в текстовое представление следующей фиксированной формы из 25 символов:Www Mmm dd hh:mm:ss yyyyn
Обратите вниманиеn
на конец строки формата. Используйтеstd::strftime
вместо этого. Вы можете контролировать все форматирование.2. Альтернативой являются утилиты new date от C 20 или библиотека данных Говарда Хиннанта , если C 20 вам еще недоступен.
3. Вы можете использовать
std::flush
вместоstd::endl
для немедленной записи текста в файл без ввода новой строки. Когда вы удаляете endl, вы не видите вывода, пока поток не будет сброшен. Он будет сброшен, если вы: используетеstd::endl
,std::flush
, вызываетеoutfile.close()
или разрешаете уничтожение fstream в конце области видимости путем завершения цикла. Это может позволить вам получить то, что вы хотите, без изменения вашего кода каким-либо другим способом
Ответ №1:
#include <iostream>
#include <fstream>
#include <ctime>
#include <unistd.h>
using namespace std;
int main()
{
fstream outfile;
outfile.open("time.txt",ios::out|ios::app);
char savetime[100];
for(;;){
time_t t = time(NULL);
strftime(savetime, sizeof(savetime), "%A %c", localtime(amp;t));
cout<<savetime;
outfile << savetime<<endl;
sleep(1);
}
}
благодаря пользователю 4581301
от savetime=asctime(localtime(amp;t));
до strftime(savetime, sizeof(savetime), "%A %c", localtime(amp;t));
Комментарии:
1. Хороший ответ, но вы хотите
%a
вместо%A
того, чтобы дублировать сокращенные названия дней, отображаемыеasctime