【发布时间】:2021-12-30 05:06:16
【问题描述】:
您好,我目前正在开发一个程序,该程序必须能够让客户介绍球员或球队,并且数据必须以 txt、姓名、id 等形式保存。
在我不得不在程序中使用结构系统之前,一切都运行良好,因为它说我使用的数组与 fgets 不兼容。
{
int i=0;
FILE *equipos;
equipos=fopen("BaseDatos/equipos.txt", "rt");//Lee los equipos guardados en el fichero
if(equipos==NULL)
{
borraVentana(20,26,100,2);
rectangulo(19,25,99,1);
gotoxy( 26,26);
printf( "Error en el archivo");
fflush(stdin);
getchar();
return -1;
}
else
{
while(fscanf(equipos, "%d", Equipos[i])==1)//El bucle indica que el archivo se leera hasta que no haya ningún entero registrado en id_equipo
{
fgets(Equipos[i], 40-1, equipos);
i++;
}
fclose(equipos);
return i;//Devuelve el valor i siendo este el numero de equipos registrados
}
}
不起作用的行是fgets(Equipos[i], 40-1, equipos);,我尝试将其更改为fscanf,但它也不起作用,它一直显示相同的错误:
错误:'fgets' 的参数 1 的类型不兼容。
有人知道我做错了什么吗?
谢谢。
编辑:
sEquipo的组成是:
#define EQUIPO_H_INCLUDED
#define DIM_NOMBRE_EQUIPO 40
struct sEquipo
{
int id_equipo;
char nombre[DIM_NOMBRE_EQUIPO];
};
#endif // EQUIPO_H_INCLUDED```
It's supposed to take out from a txt the names of the teams so it can go to another function to use it.
【问题讨论】:
-
fgets读取 strings(指向char的指针),我们可以假设(因为我们没有看到声明或定义)是 @987654328 @ 是指向int的指针。假设是因为这就是您在调用fscanf时使用Equipos[i]的方式。请尝试创建一个minimal reproducible example 和edit 你的问题来展示它。 -
如果不是秘密,能否提供Equipos结构的定义。
-
正如一些程序员老兄已经说过的那样,fgets 不会从文件中读取“结构”,而是从字符串中读取(准确地说是一行)。我相信
fread更符合您想要实现的目标。 -
您应该在 fgets 中将
Equipos[i]更改为Equipos[i]->nombre,并可能在 fscanf 中更改为&Equipos[i]->id_equipo,这样您就可以从文件中读取到结构中的正确字段
标签: arrays c struct codeblocks