ho le seguenti strutture
codice:
typedef struct studente
{
char nome[200];
char cognome[200];
int matricola;
char iscrizione[200];
} Studente;
typedef struct studente
{
char *nome:
char *cognome;
int *matricola;
char *iscrizione;
} Studente;
con la prima non mi funzione il bubblesort (devo ordinare un vettore di studenti tramite il campo cognome); con la seconda nn mi funziona il caricamento da file.
Per quanto riguarda il riempimento del vettore di strutture utilizzando la notazione char *s (puntatore a char) non permette il riempimento "corretto" dei campi della struttura, cosa che non accade utilizzando la notazione char s[200] (vettore di char, che è un puntatore all'indirizzo base del vettore); per quanto riguarda il secondo caso l'ordinamento tramite l'algoritmo del bubblesort funziona solamente se si usa la notazione char *s e non char s[200].
codice:
void sort(Studente s[], int dim)
{
Studente temp;
int i, ordinato=0;
while(!ordinato)
{
dim--;
ordinato=1;
for(i=0;i< dim;i++)
if(strcmp(s[i].cognome,s[i+1].cognome)>0)
{
temp.nome=s[i].nome; //incompatible types when assigning to type ‘char[200]’ from type ‘char *’
temp.cognome=s[i].cognome;
temp.matricola=s[i].matricola;
temp.iscrizione=s[i].iscrizione;
s[i].nome=s[i+1].nome;
s[i].cognome=s[i+1].cognome;
s[i].matricola=s[i+1].matricola;
s[i].iscrizione=s[i+1].iscrizione;
s[i+1].nome=temp.nome;
s[i+1].cognome=temp.cognome;
s[i+1].iscrizione=temp.iscrizione;
s[i+1].matricola=temp.matricola;
ordinato=0;
}
}