4

我正在尝试逐行存储从文件中获取的不同值。文本文件中的行如下所示

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

我想将逗号分隔的每个值存储为三个不同的数组,(int)number,(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, ",");
}

有人可以给我一些建议吗?

4

3 回答 3

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
}
于 2012-11-23T04:18:51.707 回答
1

函数 strtok 返回一个指针,所以它应该是

char* p = strtok(...)

检查参考here

于 2012-11-23T04:07:39.817 回答
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 的问题是你必须让每一个都是独一无二的,因为这些词都是不同的大小。我知道这个例子并不完全是你在做什么,但它会让你朝着正确的方向前进。

于 2012-11-23T04:19:49.600 回答