4

ファイルから 1 行ずつ取得したさまざまな値を保存しようとしています。テキストファイルの行は、以下に示すように読み取られます

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 の 3 つの異なる配列に格納したいと考えています。

以下にいくつかのコードがありますが、コンパイルされません。

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*を返すようにしたいのではないかと思います。ループを1秒間実行すると、バッファ内のデータが上書きされます。私はこのようなことをします:

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

これは私がしたことで、あなたがしているように見えることと似ていました。問題は、各値を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 に答える
1

関数 strtok はポインターを返すので、

char* p = strtok(...)

ここの参照を確認してください

于 2012-11-23T04:07:39.817 に答える