iColas7 Inviato 23 Gennaio 2015 Segnala Condividi Inviato 23 Gennaio 2015 Buon pomeriggio a tutti Vorrei creare un programma che mi permetta di inserire una gamma di voti d'esame (dal 18 al 30) e dentro ad ognuno di questi voti inserire i dati degli studenti che hanno preso quel dato voto. Il codice è il seguente, ma dopo la stampa corretta dei nomi inseriti fa altre due stampe indecifrabili e poi crasha...come potrei fare? #include <stdio.h>#include <stdlib.h> #define CLEAR fpurge(stdin) struct voto { int voto; struct voto *next; struct studenti *elenco;}; struct studenti { char nome[20]; char cognome[20]; int matricola; struct studenti *next;}; void aggiungi_voto(struct voto **testa);void aggiungi_studente(struct voto **testa);void stampare_studenti(struct voto *testa);void menu(); int main () { struct voto *testa = NULL; int control; int input; do { menu(); printf("\nInserire un codice: "); control = scanf("%d", &input); CLEAR; while (control == 0) { printf("Inserire un codice: "); control = scanf("%d", &input); CLEAR; } switch (input) { case 1: aggiungi_voto(&testa); break; case 2: aggiungi_studente(&testa); break; case 3: stampare_studenti(testa); break; } }while (input != 0); return 0;} void aggiungi_voto(struct voto **testa) { struct voto *temp; struct voto *nuovo; int voto; temp = *testa; nuovo = (struct voto*)malloc(sizeof(struct voto)); if (nuovo == NULL) { exit(1); } printf("\nInserire voto lista principale: "); scanf("%d", &voto); while (temp != NULL) { if (temp->voto == voto) { printf("\nVoto già inserito."); exit(1); } temp = temp->next; } nuovo->voto = voto; nuovo->next = *testa; *testa = nuovo; } void aggiungi_studente(struct voto **testa) { struct voto *temp; struct voto *trovato = NULL; struct studenti *nuovo = NULL; int voto; temp = *testa; printf("\nInserire il voto in cui si vuole inserire lo studente: "); scanf("%d", &voto); while (temp != NULL) { if (temp->voto == voto) { trovato = temp; } temp = temp->next; } nuovo = (struct studenti*)malloc(sizeof(struct studenti)); printf("\nNome:"); scanf("%s", nuovo->nome); printf("Cognome:"); scanf("%s",nuovo->cognome); printf("Matricola:"); scanf("%d", &nuovo->matricola); CLEAR; nuovo->next = trovato->elenco; trovato->elenco = nuovo; } void stampare_studenti(struct voto *testa) { int voto; struct voto *temp; struct studenti *ptr = NULL; temp = testa; printf("\nInserire il voto di cui si vogliono stampare gli studenti: "); scanf("%d", &voto); while (temp != NULL) { if (temp->voto == voto) { ptr = temp->elenco; while (ptr != NULL) { printf("\n"); printf("\nNome: %s", ptr->nome); printf("\nCognome: %s", ptr->cognome); printf("\nMatricola: %d", ptr->matricola); printf("\n"); ptr = ptr->next; } } temp = temp->next; } } void menu () { printf("\n MENU'\n"); printf("\n[1] Aggiungere voto"); printf("\n[2] Aggiungere studente al voto"); printf("\n[3] Stampare"); printf("\n[0] Uscire"); printf("\n"); }  MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g  Link al commento Condividi su altri siti Altre opzioni di condivisione...
Lief Inviato 23 Gennaio 2015 Segnala Condividi Inviato 23 Gennaio 2015 Ciao, ho provato il tuo codice. La prima cosa che ti consiglio è di scrivere un esempio di cosa dovrebbe fare, la tua spiegazione per chi non ha mai provato il codice risulta molto vaga. La seconda cosa che ti consiglio è di scrivere l'esatto test per il quale ti si blocca il programma. Ho fatto un paio di prove, all'inizio non ho avuto problemi, poi mi ha fatto una stampa sporca e nell'ultima prova si è "finalmente" bloccato... non ho avuto tempo di analizzare il codice da quel che ho visto però pare che il problema sia in qualche malloc. Link al commento Condividi su altri siti Altre opzioni di condivisione...
iColas7 Inviato 24 Gennaio 2015 Autore Segnala Condividi Inviato 24 Gennaio 2015 Eh ma dov'è l'errore nella malloc?? A me sembrano dichiarate correttamente...  MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g  Link al commento Condividi su altri siti Altre opzioni di condivisione...
dr.virus93 Inviato 31 Gennaio 2015 Segnala Condividi Inviato 31 Gennaio 2015 funziona perfettamente prova a mettere un fflush(stdin) all'inizio del main iMac 21.5 1TB HD 8GB Ram ddr3 1333 Mhz ; Macbook 2007 320GB HD 2GB RAM 667Mh; iPod Shuffle 3th Generation 1GB Link al commento Condividi su altri siti Altre opzioni di condivisione...
dr.virus93 Inviato 1 Febbraio 2015 Segnala Condividi Inviato 1 Febbraio 2015 provandolo meglio quando si tenta di aggiungere "studente al voto" va in stack overflow non ho capito bene il motivo iMac 21.5 1TB HD 8GB Ram ddr3 1333 Mhz ; Macbook 2007 320GB HD 2GB RAM 667Mh; iPod Shuffle 3th Generation 1GB Link al commento Condividi su altri siti Altre opzioni di condivisione...
iColas7 Inviato 6 Febbraio 2015 Autore Segnala Condividi Inviato 6 Febbraio 2015 provandolo meglio quando si tenta di aggiungere "studente al voto" va in stack overflow non ho capito bene il motivo Infatti non capisco, anche a me dava quel problema. Comunque ho superato l'esame di programmazione con 27 quindi sono molto contento, c'era un esercizio simile e mi è stato dato corretto...probabilmente aveva qualche problema quello  MacBook Pro Retina 15"  iPod Classic 80GB  iPhone 4s 16GB  The New iPad 32GB  Apple Cube G4  AppleTV2g  Link al commento Condividi su altri siti Altre opzioni di condivisione...
dr.virus93 Inviato 7 Febbraio 2015 Segnala Condividi Inviato 7 Febbraio 2015 Strano.. lavoro più in java che in c sinceramente... l'importante e che tu abbia passato l'esame festeggia iMac 21.5 1TB HD 8GB Ram ddr3 1333 Mhz ; Macbook 2007 320GB HD 2GB RAM 667Mh; iPod Shuffle 3th Generation 1GB Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.