Aiuto struct

di il
5 risposte

Aiuto struct

Non riesco a capire...In un programmino definisco un nuovo tipo tramite la struct...Ma quando lo utilizzo il compilatore non lo riconosce...Ecco il codice :

#include <stdio.h>

#define QLIB 5

struct libro
{
char titolo[50];
char autore[20];
char editore[20];
long int prezzo;
};

void setBooksData(libro *elenco);
void getExpensiveBooks(const libro *elenco);

main(){

libro elenco;
setBooksData(elenco);
getExpensiveBooks(elenco);

}

void setBooksData(libro *elenco){

int i;
for(i=0 ; i<QLIB; i++ ){
printf(\"\\nAcquisizione Libri, inserisci i dati relativi al libro n° %d\", i+1);
printf(\"\\nTitolo : \");
gets(elenco.titolo);
printf(\"\\nAutore : \");
gets(elenco.autore);
printf(\"\\nEditore : \");
gets(elenco.editore);
printf(\"\\nPrezzo: \");
scanf(\"%l\",elenco.prezzo);
}

printf(\"\\nFine Acquisizione\\n\");
}

void getExpensiveBooks (const libro *elenco){
int i;
long int prezzo;
char result[150];

printf(\"\\n Inserisci un prezzo: \");
scanf(\"%l\", prezzo);

for(i=0 ; i<QLIB ; i++){
if(prezzo < elenco.prezzo){
result = strcat(elenco.titolo,\" di\");
result = strcat(result,elenco.autore);
result = strcat(result,\" è più costoso, costa \");
printf(\"\\n\");
puts(result);
printf(\" %d\\n\",elenco.prezzo);
}
}

}

Ed ecco la risposta del compilatore :

libri.c:13: error: syntax error before '*' token
libri.c:14: error: syntax error before '*' token
libri.c: In function `main':
libri.c:18: error: `libro' undeclared (first use in this function)
libri.c:18: error: (Each undeclared identifier is reported only once
libri.c:18: error: for each function it appears in.)
libri.c:18: error: syntax error before \"elenco\"
libri.c:19: error: `elenco' undeclared (first use in this function)
libri.c: At top level:
libri.c:24: error: syntax error before '*' token
libri.c: In function `setBooksData':
libri.c:30: error: `elenco' undeclared (first use in this function)
libri.c: At top level:
libri.c:42: error: syntax error before '*' token
libri.c: In function `getExpensiveBooks':
libri.c:51: error: `elenco' undeclared (first use in this function)
libri.c:52: error: incompatible types in assignment
libri.c:53: error: incompatible types in assignment
libri.c:54: error: incompatible types in assignment


Qualcuno può aiutarmi? Grazie

[/b]

5 Risposte

  • Re: Aiuto struct

    kaisersose ha scritto:


    Non riesco a capire...In un programmino definisco un nuovo tipo tramite la struct...Ma quando lo utilizzo il compilatore non lo riconosce...
    Perché o fai precedere libro con la keyword struct nelle dichiarazioni delle variabili (es. struct libro elenco;), oppure usi una typedef come questa quando definisci la struttura.
    
    struct libro {
            char            titolo    [50];
            char            autore    [20];
            char            editore   [20];
            long int        prezzo;
    } libro;
    
    Credo ci siano altre imprecisioni oltre a questa nel programma, ma ti lascio il piacere di scoprirle da solo.
  • Re: Aiuto struct

    stan ha scritto:


    kaisersose ha scritto:


    Non riesco a capire...In un programmino definisco un nuovo tipo tramite la struct...Ma quando lo utilizzo il compilatore non lo riconosce...
    Perché o fai precedere libro con la keyword struct nelle dichiarazioni delle variabili (es. struct libro elenco;), oppure usi una typedef come questa quando definisci la struttura.
    
    struct libro {
            char            titolo    [50];
            char            autore    [20];
            char            editore   [20];
            long int        prezzo;
    } libro;
    
    Credo ci siano altre imprecisioni oltre a questa nel programma, ma ti lascio il piacere di scoprirle da solo.
    E' vero, cavolo, non ci avevo pensato....Le altre imprecisioni sono dovute al fatto che questo form interpreta alcune parti di codice che ho scritto come BBCODE
  • Re: Aiuto struct

    Ciao,

    Per amor di precisione, quella postata non è una typedef, ma la dichiarazione di una variabile di tipo struct libro, di nome, per l'appunto, libro...

    La typedef (nel caso la struttura non ricorra dentro sé stessa) la puoi fare anonima con qualcosa del genere:
    typedef struct {
            char            titolo    [50];
            char            autore    [20];
            char            editore   [20];
            long int        prezzo;
    } LIBRO, *LIBRO_PTR;
    In tal modo definisci il tipo LIBRO, ed il tipo puntatore a LIBRO automaticamente.

    NB: E' bene, per amor di leggibilità, che i tipi definiti dall'utente siano immediatamente riconoscibili... in genere per le typedef si utilizza il maiuscolo in modo che sia chiaro che ci si riferisce ad un tipo preciso...

    Ciaociao
  • Re: Aiuto struct

    Grazie mille per le dritte...gentilissimo
  • Re: Aiuto struct

    bottomap ha scritto:


    quella postata non è una typedef, ma la dichiarazione di una variabile di tipo struct libro
    Sicuro, sbagliato il cut&paste e non ho neppure riletto.
    Grazie della correzione.
Devi accedere o registrarti per scrivere nel forum
5 risposte