fprintf和ctime,而不从ctime传递\n

moiiocjp  于 2023-06-21  发布在  其他
关注(0)|答案(9)|浏览(83)

我在文本文件中插入时间时遇到问题。我使用下面的代码,我得到了|21,43,1,3,10,5| Wed Feb 01 20:42:32 2012,这是正常的,但我想做的是把时间放在数字之前,例如Wed Feb 01 20:42:32 2012 |21,43,1,3,10,5|,但是,我不能这样做,因为当我在fprintf之前使用fprintf和ctime函数时,它识别ctime中的\n,所以它改变了第一行,然后打印数字。它是这样的:

Wed Feb 01 20:42:32 2012
    |21,43,1,3,10,5|

这是我不想要的东西……我如何在不切换到文本中的下一行的情况下fprintf时间???提前感谢!

fprintf(file,"   |");
    for (i=0;i<6;i++)
    {
        buffer[i]=(lucky_number=rand()%49+1);       //range 1-49
        for (j=0;j<i;j++)                           
        {
            if (buffer[j]==lucky_number)
                i--;
        }
        itoa (buffer[i],draw_No,10);
        fprintf(file,"%s",draw_No);
        if (i!=5)
            fprintf(file,",");
    }
    fprintf(file,"|     %s",ctime(&t));
lstz6jyr

lstz6jyr1#

您可以使用strftime()localtime()的组合来创建时间戳的自定义格式化字符串:

char s[1000];

time_t t = time(NULL);
struct tm * p = localtime(&t);

strftime(s, sizeof s, "%A, %B %d %Y", p);

printf("%s\n", s);

ctime使用的格式字符串就是"%c\n"

ql3eal8s

ql3eal8s2#

您可以使用strtok()\n替换为\0。下面是一个最小的工作示例:

#include <stdio.h>
#include <string.h>
#include <time.h>

int main() {
    char *ctime_no_newline;
    time_t tm = time(NULL);

    ctime_no_newline = strtok(ctime(&tm), "\n");
    printf("%s - [following text]\n", ctime_no_newline);

    return 0;
}

输出:

Sat Jan  2 11:58:53 2016 - [following text]
gstyhher

gstyhher3#

只需使用%.19s:

struct timeb timebuf;
char *now;

ftime( &timebuf );
now = ctime( &timebuf.time );

/* Note that we're cutting "now" off after 19 characters to avoid the \n
that ctime() appends to the formatted time string.   */
snprintf(tstring, 30, "%.19s", now);  // Mon Jul 05 15:58:42
velaa5lx

velaa5lx4#

1.将ctime()的返回值复制到一个临时字符串,从该临时字符串中删除'\n',然后打印该临时字符串。
1.使用printf转换的(字段宽度和)精度,仅打印ctime()返回的前24个字符。

hlswsv35

hlswsv355#

在C++11中,你可以这样做:

#include <iostream>
#include <chrono>
#include <iomanip>
using namespace std;
using namespace chrono;

// Prints UTC timestamp
void printTime() {
    time_point<system_clock> now = system_clock::now();
    time_t now_time = system_clock::to_time_t(now);

    auto gmt_time = gmtime(&now_time);
    auto timestamp = std::put_time(gmt_time, "%Y-%m-%d %H:%M:%S");
    cout << timestamp << endl;
}

输出:

2017-06-05 00:31:49

pkbketx9

pkbketx96#

怎么样:

char *p;
int len;

/* ... */

p = ctime(&t);
len = strlen(p);
fprintf(file,"|     %.*s", len - 1, p);

这样,它只打印字符串减去最后一个字符(即\n)。

hmae6n7t

hmae6n7t7#

我在获得ctime字符串后这样做了:

#include <string.h>
...
myctime[ strlen(myctime) - 1 ] = '\0';

这只是用一个字符串终止字符覆盖了ctime回车符,有效地用两个'\0'字符而不是一个字符终止字符串。(ctime一开始就这么做似乎很奇怪。)

nc1teljy

nc1teljy8#

只需将'length - 1'字节复制到另一个字符串。

strncpy( newString, draw_No, strlen(draw_no) - 1 );
b1uwtaje

b1uwtaje9#

简单地说:

c_time_string = ctime(&current_time);
    len_of_new_line = strlen(c_time_string) - 1;
    c_time_string[len_of_new_line] = '\0';

这实际上会做的是用null-terminal字符替换ctime数组的strlen - 1字符(在这种情况下是新的一行字符)-它从结束'\n'处删除新的一行字符并缩短1个字符的数组。
如果strlen之前是25,那么之后应该是24。

相关问题