Salve, premetto che sono nuovo sul forum quindi scusate se faro' qualche errore.
Avrei bisogno di un aiuto con una funzione del mio programma nella quale aggiorno i dati di un carrello della spesa. La funzione controlla per prima cosa se l'ultimo articolo aggiunto e' nuovo, nel caso fosse gia' presente nel carrello aggiorna solo la quantita' (fin qui la funzione e' apposto), altrimenti passa all'ordinamento degli elementi del carrello in ordine alfabetico (ordinamento per selezione di massimo). Ho fatto qualche test e sembrava funzionare ma all'aggiunta di alcuni articoli in particolare l'ordinamento non avviene, anzi gli articoli iniziano a mettersi a caso... . La funzione di seguito:

Articolo e' una struct fatta cosi:{char *codice, char *nome, ecc(le altre cose non ci serviranno qui)}
int art_carrello[10] e' un array con i codici degli articoli
int quantita[10] e' la quantita' di ogni articolo acquistato

void aggiorna_carrello(Articolo lista_art[], int art_carrello[], int quantita[], int *n_art){
int i=0, max;
while(art_carrello[i]!=art_carrello[*n_art-1] && i<*n_art-1){ //controlla se l'articolo messo nel
i++; //carrello e' nuovo
};
if(i!=*n_art-1 && *n_art!=0){ //se era gia' presente aggiorna solo
quantita[i]+=quantita[*n_art-1]; //la quantita'
*n_art-=1;
}else
for(int k=*n_art-1; k>0; k--){ //altrimenti inizia l'ord. con k che va dalla fine all'secondo
max=0; //elemento dell'array, e a ogni ciclo in posizione k andra'
for(int j=1; j<k+1; j++){ //l'elemento massimo (ultimo in ordine alfabetico)
if(strcmp(lista_art[art_carrello[max]].nome,lista_art[art_carrello[j]].nome)<0){
max=j;
} //j invece cerca l'elemento massimo partendo dal secondo
} //(assumo che il max sia il primo ele. con max=0)
if(max!=k){
swap(&art_carrello[k],&art_carrello[max]);
swap(&quantita[k],&quantita[max]);
}
}
}
}


Sto cercando di rendere tutto il piu' chiaro e veloce da capire possibile, scusate se sono disordinato.
Eseguendo dei debug ho la sensazione che il problema stia nell'uso di STRCMP che per esempio dice che "pasta" > "uova" e "pane"<"biscotti"...
Ah un altro problema e' che senza questa funzione posso aggiungere qualunque articolo al carrello, mentre la uso invece se cerco di acquistare l'ultimo elemento della lista (codice=10, nome ="caffe", descrizione="", prezzo=2.5) il programma si blocca e fa chiudere codeblock con "status -1073741819" che non ho la piu' pallida idea di cosa significhi.
Grazie in anticipo e scusate se mi sono dilungato troppo.