繁体   English   中英

从C中的.txt文件读取字符串的二维数组

[英]Reading two-dimensional array of strings from .txt file in c

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

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

您的示例显示了“篮球保龄球骑行”,它是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”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM