Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di koolk
    Registrato dal
    Sep 2007
    Messaggi
    89

    [C] Newbie su puntatori e strutture

    Salve a tutti,
    scusate la mia domanda veramente niubbazza, ma sto studiando le strutture e ho scritto il seguente codice di esempio:

    #include <stdio.h>
    #define MAXNUM 5
    struct libreria
    {
    char titolo[30];
    char autore[30];
    long int prezzo;
    };
    void inserisci();

    main()
    {
    struct libreria lib;

    inserisci();
    }

    void inserisci()
    {
    int i;
    struct libreria *libtemp;
    for(i=0;i<MAXNUM;i++)
    {
    printf("\nInserire il titolo del libro %d :",i+1);
    gets(libtemp[i].titolo);
    printf("\nInserire l\' autore del libro %d :",i+1);
    gets(libtemp[i].autore);
    printf("\nInserire il prezzo del libro %d :",i+1);
    scanf("%d",&libtemp[i].prezzo);
    }
    }

    Ho compilato con Dev-C++ vers.4 e mi dice tutto ok...vado in esecuzione e la prima volta cicla bene chiedendomi titolo,autore e libro. Dal secondo giro in poi mi salta la richiesta del titolo, e va direttamente alla richiesta dell'autore: perchè? :master:

    Grazie per l'aiuto,
    Kool K

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] Newbie su puntatori e strutture

    Originariamente inviato da koolk
    Ho compilato con Dev-C++ vers.4 e mi dice tutto ok...vado in esecuzione e la prima volta cicla bene chiedendomi titolo,autore e libro. Dal secondo giro in poi mi salta la richiesta del titolo, e va direttamente alla richiesta dell'autore: perchè?
    È il solito "famoso" problema della scanf.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    Comunque il programma è sbagliato, devi allocare lo spazio necessario alle variabili lette da tastiera.

    Nel main dichiari la variabile lib e poi non la utilizzi;
    memorizzi i dati nella variabile libtemp, che nel main non viene vista.

  4. #4
    Utente di HTML.it L'avatar di koolk
    Registrato dal
    Sep 2007
    Messaggi
    89
    Pork è vero, non ci avevo proprio pensato...ma che stupido.
    ehm,uhm,doh... :master: ahem...

    CIOE?
    Kool K

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    per la scanf potresti dichiare prezzo come un char e quindi usare la gets come per nome e autore.

    char prezzo[30];

    gets(libtemp[i].prezzo);


    per la memoria puoi inserire prima del ciclo for una riga del genere:

    libtemp=(struct libreria*)malloc(MAXNUM*sizeof(struct libreria));

    oppure dichiare staticamente:

    struct libreria libtemp[MAXNUM];


    Comunque c'è sempre il problema che libtemp nel main non viene vista...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Direi che le correzioni necessarie potrebbero portare a questo codice ...

    codice:
    #include <stdio.h>
    
    #define MAXNUM 5
    
    struct libreria
    {
       char titolo[30];
       char autore[30];
       long int prezzo;
    };
    
    struct libreria lib[MAXNUM];
    
    void inserisci()
    {
    	int i;
    
    	for(i=0;i<MAXNUM;i++)
    	{
    		printf("\nInserire il titolo del libro %d :",i+1);
    		gets(lib[i].titolo);
    		printf("\nInserire l' autore del libro %d :",i+1);
    		gets(lib[i].autore);
    		printf("\nInserire il prezzo del libro %d :",i+1);
    		scanf("%d",&lib[i].prezzo);
    
    		while(!getchar());
    	}
    }
    
    int main()
    {
       inserisci();
    
       return 0;
    }

  7. #7
    Utente di HTML.it L'avatar di koolk
    Registrato dal
    Sep 2007
    Messaggi
    89
    grazie a tutti,
    stasera faccio le correzioni e continuo il codice...voglio provare ad implementare stampa (a video) e ricerca all'interno dei record per prezzo.
    Se ho qualche altra domanda posso scocciare ancora?
    Kool K

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il forum e' fatto per scocciare ...

    Ma apri un'altra discussione, non continuare in questa ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.