从c中的.text文件中读取二维数组的字符串

时间:2013-02-23 18:12:26

标签: c arrays string

我在阅读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

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

1 个答案:

答案 0 :(得分:1)

你的例子显示了“篮球保龄球自行车”,这是一个超过20个字符串。我假设每个单词应该分开存储,所以对于Jason来说,hobbi [0] =“篮球”,hobbi [1] =“保龄球”。但是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')。