2012-11-23 29 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

正式的,你应该检查内存分配,或评论你忽略错误检查。 –

相关问题