Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2022
    Messaggi
    1

    [C] Errore in comparazione per ordinamento di strighe

    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2022
    Messaggi
    1
    Ragazzi dopo moolti tentativi di risolverlo da parte mia e di miei amici sono riuscito a trovare il problema.
    Nel caso qualcuno avesse provato a cercare la soluzione:

    strcmp(lista_art[art_carrello[max]-1].nome,lista_art[art_carrello[j]-1].nome)<0

    Brutta gestione degli indici degli array (colpa mia :P). Potete chiudere il thread (lo farei io ma non so come si fa), scusate il disturbo haha.
    Ultima modifica di Malpelo; 28-01-2022 a 21:31

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.