2013-06-20 113 views
0

我已經寫了這部分代碼,它打開一個txt文件來寫入結果(令牌),strtok每隔10秒從緩衝區中給出結果(令牌)。該緩衝區從串行設備讀取。用零填充數組中的數據

while(fgets(buff, sizeof(buff), fp) != NULL) 
{ 
    fputs(buff,stdout); 
    FILE *ft = fopen("/home/pi/Desktop/data.txt","a+"); 
    struct tm *tp; 
    time_t t; 
    char s[80]; 
    t = time(NULL); 
    tp = localtime(&t); 
    strftime(s, 80, "%d/%m/%Y %H:%M:%S", tp); 
    char *pos = strchr(buff,'N'); 
    if (pos) 
    { 
     ptr = strtok(buff, "Nodo_,=:V()"); 
     i = 0; 
     while (ptr != NULL) 
     { 
      if (i == 0) 
      strcat(number, ptr); 
      if (i == 2) 
      strcat(temp, ptr); 
      if (i == 4) 
      strcat(hr, ptr); 
      if (i == 6) 
      strcat(dw, ptr); 
      if (i == 8) 
      strcat(vcc, ptr); 
      ptr = strtok(NULL, "Nodo_,=:V()"); 
      i++; 
     } 
     printf("Results: %s, %s, %s, %s, %s\n", number, temp, hr, dw, vcc); 
char (*table1[1][5])[6] = {{&number, &temp, &hr, &dw, &vcc}}; 
     for(int i = 0; i<1; i++) 
     { 
      fprintf(ft,"%s ",s); 
      for(int j = 0; j<5; j++) 
      fprintf(ft,"%s ",table1[i][j]); 
     } 
     fprintf(ft,"\n"); 
     buff[sizeof(buff)-1] = '\0'; 
     memset(nodo, 0, sizeof(number)); 
     memset(temp, 0, sizeof(temp)); 
     memset(hr, 0, sizeof(hr)); 
     memset(dw, 0, sizeof(dw)); 
     memset(vcc, 0, sizeof(vcc)); 
     printf("\n"); 

    } 
fclose(ft); 
    } 
close_port(fd); 

我有這樣的結果,我個人TXT

19/06/2013 13:16:34 7 20.83 51.79 11.05 4.85 
19/06/2013 13:16:34 10 21.83 53.79 12.05 3.85 

每一個數字7或10個返回4個號碼,你可以從結果中看到的。我想創建以下文件: 如果數量= 7,然後

20.83 51.79 11.05 4.85 0 0 0 0 

如果數量= 7,然後

0 0 0 0 21.83 53.79 12.05 3.85 

我的意思是我想有爲零的數組。然後,如果數字= 7將值置於0-3位置,請清理數組,如果數字= 10,則將數值放在位置4-7。任何好主意?

+2

的問題是不明確的。如果用零設置一個數組是問題,那麼你可以使用'memset'函數。 – Dronacharya

+0

不,我知道用memset我可以設置一個零的數組,我的問題是我怎麼能做到上述的位置,如我所描述的 – dali1985

+0

是的,現在我看到你在代碼中使用'memset'。也許你可以使用'memcpy'?我的意思是收集數組中的四個數字,後者使用'memcpy'將它們複製到從所需位置開始的零數組中。 – Dronacharya

回答