A quanto pare è un problema abbastanza comune, ho letto spesso di persone che hanno problemi con le struct in C e, purtroppo, ci sono anche io. In realtà l'unica cosa che mi viene difficile è l'ordinamento, stavo provando con il bubblesort (anche perchè è l'unico che abbiamo fatto bene) ma mi è sembrato molto poco adatto. Quindi ho optato per strncpy, funzione che ho deciso di studiare da solo, in quanto, i miei professori, si sono dimostrati totali incompetenti. Quello che vi chiedo è di postare come dovrebbe essere fatto il codice, magari con qualche spiegazione. Io ho fatto varie e infruttuose prove. Se avete anche consigli generali per migliorare il codice sono sempre ben accetti. Grazie
codice://Codice che prende in input dati di un album e li restituisce ordinati per data #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 50 struct album { char nome_album[SIZE]; char nome_artista[SIZE]; int anno_album; }; typedef struct album CD; void inserimento(int, CD[]); void stampa(int, CD[]); void ordinamento(int, CD[]); main () { int num_album; CD album[SIZE]; //int menu=1; printf("Quanti cd vuoi inserire? "); scanf("%d",&num_album); printf("\n"); printf("Inserisci i dati dei cd\n"); inserimento(num_album, album); stampa(num_album, album); ordinamento(num_album, album); system("pause"); } void inserimento(int num_album, CD album[]){ int i; for (i=0;i<num_album;i++){ printf("\nCD %d\n",i+1); printf("Nome dell'album\n"); gets(album[i].nome_album); gets(album[i].nome_album); printf("Nome dell'artista\n"); gets(album[i].nome_artista); printf("Anno di uscita dell'album\n"); scanf("%d",&album[i].anno_album); printf("\n"); } return; } void stampa(int num_album, CD album[]){ //Per ora la stampa avviene seguendo l'ordine di inserimento ma vorrei che in seguito fosse legata all'ordinamento int i; for (i=0;i<num_album;i++){ printf("\nCD %d\n",i+1); printf("%s,",album[i].nome_album); printf("%s,",album[i].nome_artista); printf("%d",album[i].anno_album); } printf("\n"); return; } void ordinamento(int num_album, CD album[]){ int i=0, j=0; for (i=0; i<num_album-1; i++){ for (j=i+1; j<num_album; j++){ if (album[i].anno_album>album[j].anno_album){ //non so come continuare, tutte le prove, non hanno funzionato } } }

Rispondi quotando
i pulsanti "CODE", "PHP" e "Quote" sono sostanzialmente inutili perché la finestra che viene fuori consente di inserire una sola riga, il modo corretto è incollare il codice e aggiungerci intorno i tag [code] ... [/code] a mano.
