Lista singolarmente concatenata in c

di il
18 risposte

Lista singolarmente concatenata in c

Salve a tutti la funzione insert del mio programma per la gestione di film non vuole proprio funzionare. . Classico segfault che non riesco a risolvere.
La lista è definita come SEGUE:
typedef char string[20];
typedef struct filmNode{
string titolo;
string genere;
string regista;
int anno;
struct filmNode *nextPtr;
}FilmNode;
typedef FilmNode *FilmNodePtr;
La funzione è la seguente:
void insert(FilmNodePtr *lPtr){
FilmNodePtr newPtr;
newPtr = (FilmNodePtr)malloc(sizeof(FilmNode));
if(newPtr != NULL){
printf("inserire il titolo del film: \n");
scanf("%19s",(*lPtr)->titolo);
printf("inserire il genere del film: \n");
scanf("%14s",(*lPtr)->genere);
printf("inserire il nome del regista del film: \n");
scanf("%19s",(*lPtr)->regista);
printf("inserire l'anno di produzione del film: \n");
scanf("%d",&((*lPtr)->anno));
newPtr->nextPtr = *lPtr;
*lPtr = newPtr;
}
else printf("memoria non disponibile.\n");
}
Non ne vengo a capo da diversi giorni..

18 Risposte

  • Re: Lista singolarmente concatenata in c

    Grazie
    Questo è il main che richiama anche un altra semplice funzione postata di seguito:
    int main(void){
    FilmNodePtr lPtr=NULL;
    insert(&lPtr);
    insert(&lPtr);
    insert(&lPtr);
    elencaFilm(lPtr);
    return 0;
    }
    void elencaFilm(FilmNodePtr lPtr){//elenca i film nel la lista inbase al titolo
    while(lPtr != NULL){
    printf("%s, ",lPtr->titolo);
    lPtr = lPtr->nextPtr;
    }
    printf("\n");
    }
  • Re: Lista singolarmente concatenata in c

    Eccolo:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef char string[20];
    typedef struct filmNode{
    string titolo;
    string genere;
    string regista;
    int anno;
    struct filmNode *nextPtr;
    }FilmNode;
    typedef FilmNode *FilmNodePtr;
    void insert(FilmNodePtr *lPtr);
    void elencaFilm(FilmNodePtr lPtr);

    int main(void){
    FilmNodePtr lPtr=NULL;
    insert(&lPtr);
    insert(&lPtr);
    insert(&lPtr);
    elencaFilm(lPtr);
    return 0;
    }
    void insert(FilmNodePtr *lPtr){
    FilmNodePtr newPtr;
    newPtr = (FilmNodePtr)malloc(sizeof(FilmNode));
    if(newPtr != NULL){
    printf("inserire il titolo del film: \n");
    scanf("%19s",(*lPtr)->titolo);
    printf("inserire il genere del film: \n");
    scanf("%14s",(*lPtr)->genere);
    printf("inserire il nome del regista del film: \n");
    scanf("%19s",(*lPtr)->regista);
    printf("inserire l'anno di produzione del film: \n");
    scanf("%d",&((*lPtr)->anno));
    newPtr->nextPtr = *lPtr;
    *lPtr = newPtr;
    }
    else printf("memoria non disponibile.\n");
    }

    void elencaFilm(FilmNodePtr lPtr){//elenca i film nel la lista inbase al titolo
    while(lPtr != NULL){
    printf("%s, ",lPtr->titolo);
    lPtr = lPtr->nextPtr;
    }
    printf("\n");
    }
  • Re: Lista singolarmente concatenata in c

    Grande io ho provato a passare a insert i dati come parametri formali attraverso il main ma non ho risolto niente
  • Re: Lista singolarmente concatenata in c

    Grande adesso provo bastava accedere ai campi col punto come cxxo ho fatto a non penaarci
  • Re: Lista singolarmente concatenata in c

    L uso di newPtr invece di lPtr ?
  • Re: Lista singolarmente concatenata in c

    Sisi qsto gia lo avevo fatto pero nella versione che ho postato era "errata 2 volte" il fatto è che inizializando i campi con newPtr->.... invece di (*newPtr). .... ( i n teoria scritture equivalenti) mi dava lo stesso segfault.. se invece di stringhe erano tutti campi interi e usavo newPtr-> non da errori e non capisco tuttora perche
  • Re: Lista singolarmente concatenata in c

    Allora.. la freccia si usa per i puntatori a struttura quindi le scritture( (*newPtr).titolo; new?titolo) in questo caso sono equivalenti. . Eppure in questo codice con la struttura con delle stringhe nei campi se uso la scrittura con la freccia mi solleva il segfault
  • Re: Lista singolarmente concatenata in c

    Si è?! Domani verifico per bene e ti faccio sapere
  • Re: Lista singolarmente concatenata in c

    Se volessi prendere una stringa per il titolo con dei spazi come potrei fare?
    Perche giustamente la scanf scritta cosi qndo incontra uno spazio si ferma.. lo so sono cose banali ma anche se mi piace parecchi il c sono abituato al java e il c mi da ancora problemi
  • Re: Lista singolarmente concatenata in c

    Fgets
  • Re: Lista singolarmente concatenata in c

    Fgets() è per i file giusto?
    Per prenderla dalla tastiera uso semplicemente gets() ?
  • Re: Lista singolarmente concatenata in c

    RayD ha scritto:


    non capisco tuttora perche
    Proponi due spezzoni di codice ... uno in cui tutto va bene e l'equivalente in cui hai l'errore ...
  • Re: Lista singolarmente concatenata in c

    RayD ha scritto:


    fgets() è per i file giusto?
    Per prenderla dalla tastiera uso semplicemente gets() ?
    No ... utilizza fgets con stdin come stream
  • Re: Lista singolarmente concatenata in c

    Capito tutto... qndo accedevo ai campi con l operatore freccia non funzionava perche avevo dimenticato & nel scanf("%d",&(newPtr->anno)) e dato che anno è un intero la scanf non sapeva dove mettere il valore... grazie comunque
Devi accedere o registrarti per scrivere nel forum
18 risposte