2012-02-01 5 views
11

मुझे टेक्स्ट फ़ाइल में समय डालने में कोई समस्या है। मैं निम्नलिखित कोड का उपयोग करता हूं और मुझे |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 सीटाइम के भीतर और इसलिए यह लाइन 1 को बदलता है और फिर संख्याओं को प्रिंट करता है। यह प्रकार है:fprintf और ctime गुजरने के बिना n ctime

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

जो कुछ है कि मुझे नहीं चाहते हैं ... कैसे मैं पाठ में अगली पंक्ति में swiching बिना समय 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)); 

उत्तर

21

आप अपने टाइमस्टैम्प के एक कस्टम स्वरूपित स्ट्रिंग बनाने के लिए 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" है।

+0

अच्छा जवाब। मैं भी कोशिश करूँगा। – BugShotGG

+0

@ केरेक एसबी, क्या आपको पिछली पंक्ति में प्रारूप "% c \ n" लगता है? –

+0

अच्छा! 'strftime' विभिन्न प्रारूपों में समय टिकट मुद्रित करने के लिए बहुत लचीला दृष्टिकोण की अनुमति देता है! – sg7

7
  1. कॉपी एक अस्थायी स्ट्रिंग के लिए ctime() की वापसी, कि अस्थायी स्ट्रिंग से '\n' निकालें, तब अस्थायी स्ट्रिंग मुद्रित करें।
  2. प्रिंटफ रूपांतरण की (फ़ील्ड चौड़ाई और) परिशुद्धता का उपयोग कर ctime() से वापसी के पहले 24 वर्ण प्रिंट करें।
0

बस 'लंबाई - 1' बाइट्स को दूसरी स्ट्रिंग पर कॉपी करें।

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

शायद स्ट्रिंग को बाद में समाप्त करने का एक अच्छा विचार है। – FatalError

3

कैसे के बारे में:

char *p; 
int len; 

/* ... */ 

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

इस तरह यह केवल स्ट्रिंग शून्य से अंतिम वर्ण (अर्थात \n) प्रिंट करता है।

+3

या: printf ("%। * S", (int) strlen (पी) -1, पी); –

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 का स्थान लेता है - (इस मामले में नई लाइन वर्ण) 1 वर्ण अशक्त-टर्मिनेटर चरित्र के साथ ctime सरणी के - इसे बाहर छोर से नई लाइन चरित्र कटौती '\ n' और 1 वर्ण की सरणी को छोटा करें।

तो strlen से पहले 25 था, इस के बाद यह 24

1

मैं ctime स्ट्रिंग प्राप्त करने के बाद ऐसा किया जाना चाहिए:

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

यह सिर्फ एक स्ट्रिंग समाप्ति चरित्र के साथ ctime गाड़ी वापसी अधिलेखित कर देता है, प्रभावी रूप से एक के बजाय दो '\ 0' वर्णों के साथ स्ट्रिंग को समाप्त करना। (यह अजीब लगता है ctime करता है कि कि पहली जगह में।)

3

बस% .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 
1

आप strtok() उपयोग कर सकते हैं \0 साथ \n को बदलने के लिए।

#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] 
0
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

संबंधित मुद्दे