C 从文本中读取多个结构

标签 c struct

嘿,我一直在尝试从文本文件中读取多个结构,并计算我的项目中已读取的结构数量。

这是我的结构:

#define Input_Length_fileName 25 /*maximum letter for Input*/ 
#define Input_Length_description 80 /*maximum letter for Input*/ 
#define DataSize 200 /*maximum letter for one pic*/ 
#define Maximun_Picture 20 /*maximum photos in recoude*/

typedef struct picture_Data
{
char fileName[Input_Length_fileName];
char description[Input_Length_description];
char location[Input_Length_fileName];
int peopleCount;
}pic;

这是读取结构的函数:

#define PIC_FILE "Pic.dat"
int readFile (pic *entries, int pic_order){

FILE * infile;
int count = 0;
char line[DataSize];

infile = fopen(PIC_FILE, "rb");

if (infile != NULL)
{
    count = fread(entries, sizeof(pic), Maximun_Picture, infile);

    while (fgets(line, DataSize, infile)!=NULL)
    {

        sscanf(line, "%s,%s,%s,%d", &entries[pic_order].fileName, &entries[pic_order].description, &entries[pic_order].location, &entries[pic_order].peopleCount);              
    }

    fclose(infile);
}
entries[count].fileName[0]= '\0';

return count;
}

这就是文本文件的方式

 photo1,I love this photo1,Helsinki,20
 photo2,I love this photo2,Pari,30

这就是我所说的

for ( i = 0; i < Maximun_Picture; i++)
  {
     pic_recorded_number = readFile(&picture_record[i],i);
  }


    printf("%d\n", pic_recorded_number);
    printf("%d\n", picture_record[0].peopleCount);

我知道这样不对。有人可以告诉我出了什么问题以及如何解决吗? 非常感谢你,我的!!

最佳答案

#include <stdio.h>

#define Input_Length_fileName 25 /*maximum letter for Input*/ 
#define Input_Length_description 80 /*maximum letter for Input*/ 
#define DataSize 200 /*maximum letter for one pic*/ 
#define Maximun_Picture 20 /*maximum photos in recoude*/

typedef struct picture_Data{
    char fileName[Input_Length_fileName];
    char description[Input_Length_description];
    char location[Input_Length_fileName];
    int peopleCount;
} pic;

#define PIC_FILE "Pic.dat"

int readFile (pic *entries){//[, int pic_order] : Not required If you are reading all.
    FILE * infile;
    int count = 0;
    char line[DataSize];

    if(NULL == (infile = fopen(PIC_FILE, "r")))// "r" : text file
        return 0;
    //count = fread(entries, sizeof(pic), Maximun_Picture, infile);//for fwrite

    while (fgets(line, DataSize, infile)!=NULL){
        sscanf(line, " %[^,],%[^,],%[^,],%d",
        entries[count].fileName, entries[count].description, entries[count].location, &entries[count].peopleCount);
        if(++count >= Maximun_Picture)
            break;
    }
    fclose(infile);
    return count;
}

int main(){
    pic picture_record[Maximun_Picture];
    int pic_recorded_number = readFile(picture_record);

    printf("%d\n", pic_recorded_number);
    printf("%s\n", picture_record[0].description);
    printf("%d\n", picture_record[0].peopleCount);
    return 0;
}

关于C 从文本中读取多个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607580/

相关文章:

c - 声明一个二维字符数组?

c - 当没有 IntelliSense 错误时,为什么会有这么多编译错误?怎么修?

c - 尝试在C中通过空地址访问数据?

c - 使用 void 指针在节点中存储任何类型的数据(可以是 int char 或结构)

c - 数独生成器导致段错误

c - 指针在 printf 后改变值

c - 是否可以将类型推断添加到 C 语言中?

c - c中的双分号是什么意思?

c - 如何按城镇值排序将指向城市数组的指针插入城镇数组?

c - 在 visual studio 中跟踪变量的变化