0

我在读取 C 中的二维字符串数组时遇到了麻烦。我有一个文本文件,其布局为:姓名、爱好数量(H)、爱好名称。所以阵列是由爱好的数量决定的。

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

typedef struct{
char name[10];
int H;
char hobbi[20];
} data;

int main(void) {
data person[50];
FILE *input;
char source[]=("data.txt");
inout=fopen(source,"r");
int i=0;
int j;
while(!feof(input)) {

        fscanf(input, "%s", person[i].name);
        fscanf(input, "%d", person[i].H);
        for(j=0; j<=person[i].H; j++){
            fscanf(input, "%s", person[i].hobbi[j]);
            }
        i++;

}


fclose(input);
getchar();
getchar();
return 0;

}

我有一个 .txt 文件,如下所示:

Jason 3 basketball bowling cycling
Arnold 2 boxing rollerskating
Mary 2 basketball rollerskating
Anne 3 bowling boxing basketball

该程序的目标是,当您输入一个爱好的名称时,它会为您提供一个名称列表,这些名称具有该爱好的共同点。但首先,我试图让输入部分正确。我将这部分代码翻译成英文,所以我希望没有任何错误会破坏代码。任何帮助深表感谢 :)

4

1 回答 1

1

您的示例显示了“篮球保龄球自行车”,它是一个超过 20 个字符的字符串。我假设每个单词都应该单独存储,所以对于 Jason,hobbi[0] = "basketball", hobbi[1] = "bowling"。但hobbi只能容纳 20 个字符。我认为你需要它来保存 20 串字符。现在,hobbi[0] = 'b', hobbi[1] = 'a', hobbi[2] = 's', hobbi[3] = 'k', hobbi[4] = 'e', hobbi[ 5] ='t'。

您需要使 hobbi 成为一个指针数组。并为每一个分配新的空间。

char *hobbi[20];
...
fscanf(input, "%s", buffer);
person[i].hobbi[j] = strdup(buffer);

或者使它成为一个数组数组。

char hobbi[20][20];

对于这两个,person[i].hobbi[j]是一个字符串(例如,“篮球”)和person[i].hobbi[j][k]一个字符(例如,'b')。

于 2013-02-23T18:31:59.503 回答