我是 C 的新手,对于我的班级,我们有一个项目,我们必须在其中编写一个函数,该函数读取文件中的所有项目并按文件顺序在动态创建的列表中返回它们。文件的每一行都是一项,格式如下:
'<description>' <damage> <cost> <weight>
它应该按文件顺序返回指向文件中项目的基指针,如果文件不存在,则返回 NULL。
到目前为止,这是我的代码:
item_t *ReadItemsFromFile(char *file)
{
typedef struct item item_t;
struct item
{
char name[32];
float cost, weight;
int dam;
};FILE *fpin = fopen(file, "r");
if(fpin != NULL)
{
item_t i[20];
int n = 0;
char line[sizeof(file)];
while(fgets(line, sizeof(line), fpin) != NULL){
(fscanf(fpin, " '%[^']' %d %f %f", i[n].name, &i[n].dam, &i[n].cost, &i[n].weight));
fputs(i[n].name, stdout);
n++;
}
} else {
return NULL;
}
return(0);
}
我一直在使用 fputs 来尝试测试代码,但它总是给我第一个和最后一个项目的乱码。另外,当我尝试放
fputs(&i[n].dam, stdout);
所以我可以测试结构的其他变量,我一直收到错误消息“从不兼容的指针类型传递'fputs'的参数1。
我不确定我是否使用 fscanf 准确地传递到结构变量中,或者是否是其他东西。