23

テキスト ファイルに時刻を挿入する際に問題があります。私は次のコードを使用し、|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の前にctime関数でfprintfを使用すると、\ n ctime 内なので、1行目を変更してから数字を出力します。次のようになります。

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

これは私が望んでいないことです...テキストの次の行に切り替えずに時間を印刷するにはどうすればよいですか??? 前もって感謝します!

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));
4

9 に答える 9

31

strftime()との組み合わせを使用してlocaltime()、タイムスタンプのカスタム形式の文字列を作成できます。

char s[1000];

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

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

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

で使用されるフォーマット文字列ctimeは単純に"%c\n".

于 2012-02-01T19:07:24.110 に答える
12

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]
于 2016-01-02T18:07:38.543 に答える
9
  1. の戻り値を一時文字列にコピーし、その一時文字列から をctime()削除して'\n'から、一時文字列を出力します。
  2. ctime()printf 変換の (フィールド幅と) 精度を使用して、戻り値の最初の 24 文字だけを出力します。
于 2012-02-01T19:06:15.403 に答える
3

どうですか:

char *p;
int len;

/* ... */

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

そうすれば、文字列から最後の文字 (つまり\n) を除いたものだけが出力されます。

于 2012-02-01T19:11:50.753 に答える
0

単に:

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

これが実際に行うことは、strlen (ctime 配列の 1 文字 (この場合は改行文字)) を null ターミネーター文字に置き換えることです。末尾 '\n' から改行文字を切り取り、1 文字の配列を短縮します。

strlen が前に 25 だった場合、この後は 24 になります。

于 2015-01-05T11:28:36.543 に答える
0

「長さ - 1」バイトを別の文字列にコピーするだけです。

strncpy( newString, draw_No, strlen(draw_no) - 1 );
于 2012-02-01T19:07:56.867 に答える