Domanda

Sto provando a scrivere un programma che legge il testo da un file esterno (stringa stringa int, per riga). Struct è definito al di fuori della funzione principale:

typedef struct Person {
  char fname[15];
  char lname[20];
  unsigned long int birth;
} clovek;

Non ho bisogno di " clovek " per essere un array come con ogni linea i dati possono essere sovrascritti. La linea è rossa per il buffer con:

fgets(buffer, 50, datafile);

Quindi voglio analizzarlo alla struttura ma è qui che sorge il mio problema:

int i = 0;
while (buffer[i] != ' ') {
  clovek.fname[i] = buffer[i];
  i++;
}

E questo mi dà un errore: identificatore previsto o token '(' before '.'

Volevo anche usare questo codice per il debug ma dà anche un altro errore:

printf("fname, %s\n", clovek.fname);

errore: espressione prevista prima di 'clovek'

La mia ipotesi è che ho completamente frainteso l'uso di struct.

È stato utile?

Soluzione

clovek è un alias per struct Person . Rimuovi la parola chiave typedef o crea un oggetto di tipo struct Person da qualche parte nel tuo codice. Con il presente codice puoi fare:

clovek someone;

while (buffer[ i ] ) != ' ') {
    someone.fname[ i ] = buffer[ i ];
/* .. */

Altri suggerimenti

La tua dichiarazione definisce clovek come alias della struttura Person.

Rimuovi " typedef " dalla dichiarazione. In questo modo, clovek diventa una variabile di tipo Person:

O ancora meglio, separare la dichiarazione struct dalla dichiarazione variabile:

struct Person {
  char fname[15];
  char lname[20];
  unsigned long int birth;
};

struct Person clovek;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top