2012-11-23 28 views
4

我試圖存儲從文件逐行讀取的不同值。在讀的東西文本文件中的線示出下面C - 將文本中的值存儲到數組中

100000,player1,long title name 
300000,someotherplayer,another long title name 
45512845,thisplayer,one more long title name 

我要存儲的每個是逗號分隔成三個不同的陣列值,(INT)的編號,(STR)PLAYER_NAME,(STR)TITLE_NAME。

我有一些代碼在下面,但它不能編譯。

ptr_file=fopen("text.txt", "r"); 
char buffer[1000]; 
int line; 
line = 0; 

while(fgets(buffer, sizeof(buffer), ptr_file) != NULL){ 
    char number[line]=strtok(buffer, ","); 
    char player_name[line]=strtok(NULL, ","); 
    char title_name[line]=strtrok(NULL, ","); 
} 

有人可以給我一些建議嗎?

+2

那麼編譯器錯誤是什麼? – alex

+0

你在變量聲明中忘記了標識符之前的*嗎? – Jack

+0

「o」是錯誤的,但它是運行時錯誤。 ptrfile與ptr_file肯定是編譯時錯誤。和循環的內容是某種異端 – keltar

回答

2

因此,有幾個與你的代碼問題,

您打開該文件模式「o」,我不知道它是什麼,我懷疑你想要「r」 strtok返回一個char *,你不能指定給char []。 第二次運行循環時,您將覆蓋緩衝區中的數據。 我會做這樣的事情:

struct player { 
    int number; 
    char player_name[64]; 
    char title_name[256]; 
}; 

int main(void) { 
    FILE *ptrfile=fopen("text.txt", "r"); 
    char buffer[1000]; 
    int line; 
    struct player players[16]; 
    line = 0; 
    if(ptrfile==NULL) return 0; 
    while(fgets(buffer, sizeof(buffer), ptrfile) != NULL){ 
     if(strcmp(buffer, "") == 0) return 0; 
     char *number=strtok(buffer, ","); 
     char *player_name=strtok(NULL, ","); 
     char *title_name=strtok(NULL, ","); 
     players[line].number=atoi(number); 
     strcpy(players[line].player_name, player_name); 
     strcpy(players[line].title_name, title_name);; 
     line++; 
    } 
    fclose(ptrfile); 
    return 0 
} 
+0

正式地,你應該檢查內存分配,或評論你忽略錯誤檢查。 –

1

strtok函數返回一個指針,所以應該

char* p = strtok(...) 

檢查參考here

1

這是我做的事,這是類似於你彷彿在做。你會發現的問題是,你想把每個值變成一個char *,但你必須malloc每一個,然後你可以將這個char *連接到數組中。用數字來做這件事也會比較容易,然後再把它們變成int。

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

    int main() 
    { 
     char *msg[100]; 
     char temp[100]; 
     int length, i; 
     int num = 0; 


     while((scanf("%s", &temp[0]) != EOF)) 
     { 
      length = strlen(temp); 
      msg[num] = malloc((length+1)* sizeof(char)); 
      strcpy(msg[num], temp); 
      num++; 
     } 

     printf("There are %d words in the this input.\n", num); 

     for(i = 0; i < num; i++) 
     { 
      printf("%s\n", msg[i]); 
     } 
     return 0; 
    } 

與malloc的事情是,你將不得不讓每一個唯一,因爲單詞都是不同的大小。我知道這個例子並不完全是你在做什麼,但它會讓你朝着正確的方向前進。

+0

正式的,你應該檢查內存分配,或評論你忽略錯誤檢查。 –

相關問題