Pregunta
Estoy intentando escribir un programa que lee texto de un archivo externo (cadena de caracteres int, por línea). Struct se define fuera de la función principal:
typedef struct Person {
char fname[15];
char lname[20];
unsigned long int birth;
} clovek;
No necesito " clovek " para ser una matriz como con cada línea de datos se puede sobrescribir. La línea es roja para amortiguar con:
fgets(buffer, 50, datafile);
Luego quiero analizarlo a la estructura pero ahí es donde surge mi problema:
int i = 0;
while (buffer[i] != ' ') {
clovek.fname[i] = buffer[i];
i++;
}
Y esto me da un error: identificador esperado o '(' antes de '.' token
También quería usar este código para la depuración, pero también genera otro error:
printf("fname, %s\n", clovek.fname);
error: expresión esperada antes de 'clovek'
Mi conjetura es que entendí totalmente mal el uso de struct.
Solución
clovek
es un alias para struct Person
. Quite la palabra clave typedef
, o cree un objeto de tipo struct Person
en algún lugar de su código. Con el presente código puedes hacer:
clovek someone;
while (buffer[ i ] ) != ' ') {
someone.fname[ i ] = buffer[ i ];
/* .. */
Otros consejos
Su declaración define clovek como un alias a la estructura Person.
Eliminar " typedef " de la declaración. De esta manera, clovek se convierte en una variable de tipo Person:
O incluso mejor, declaración de estructura separada de declaración de variable:
struct Person {
char fname[15];
char lname[20];
unsigned long int birth;
};
struct Person clovek;