gpt4 book ai didi

c - 从文件中读取数据并写入结构

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:34 24 4
gpt4 key购买 nike

我正在尝试从文件中读取数据并将数据存储在结构中。该结构如下所示:

struct someData {
int number;
char *name;
};

文件中的数据可以是任何格式。现在我正在尝试以 CSV 格式阅读。数据将始终是一个字符串,后跟一个整数。

some string data,100
another string,500

这是我尝试读取数据并将其放入结构中的代码部分。

FILE *ifp;
char *mode = "r";
char *name;
int number;

ifp = fopen("myDataFile.txt", mode);

if (ifp == NULL) {
fprintf(stderr, "Can't open input file in.list!\n");
exit(1);
}

// read up to 100 characters up to a comma, then a decimal
while(fscanf(ifp, "%100[^,],%d\n", name, &number) != EOF){

// print out the data we got
printf("Data from file: %s %d", name, number);


struct someData *newData = (struct someData *) malloc(sizeof(struct someData));
newData->number = number;
newData->name = name;
printf("Name: %s Number: %d\n\n",newData->name, newData->number);
}

打印语句给出以下内容

Data from file: some string d 100
Name: some string d Number: 100

Data from file: another stri Number: 500
Name: another stri Number 500

第二个名字被截断了,实际上最终打印了几个奇怪的字符。我认为 while 循环中的 fscanf 有问题。我尝试了其他几种方法来获取数据,例如使用 %s 而不是 %100,但没有任何效果。

最佳答案

您需要将第二个 char *name; 更改为char name[101];(不是结构).

如果你改变了会更好:

    while(fscanf(ifp, "%100[^,],%d\n", name, &number) != EOF){

    while(fscanf(ifp, " %100[^,],%d", name, &number) == 2){

这个:

  • 添加初始空白的跳过
  • 删除尾随 \n,这有时会导致问题
  • 验证是否已读取两个有效参数。

此外,newData->name = name; 将不起作用:您需要像 newData->name = strdup(name); 这样的东西。

此外,作为风格问题,我建议更改:

     struct someData *newData = (struct someData *) malloc(sizeof(struct someData));

到:

     struct someData *newData = malloc(sizeof *newData);

这将避免一些冗余,即“DRY”。

而且你永远不会保存newData;我假设您打算将它添加到链表或其他类似容器中。

此外,您最终需要添加错误检查,但这超出了本问题的范围。

关于c - 从文件中读取数据并写入结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21802268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com