Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    9

    Aiuto!!!Linguaggio c: funzione qsort, parametri

    Salve a tutti,
    devo chiamare la funzione qsort ma al primo parametro al posto di un semplice array dovrei indicare il nome di un ramo di una struttura.
    Per esempio la struttura è


    typedef struct guess_record
    {
    int uid;
    int tries;
    int guess;
    } guess_record;

    e dentro la main troviamo la definizione
    guess_record* guessdb = NULL;

    quindi esisterà un guessdb[i].uid, un guessdb[i].tries, e un guessdb[i].guess.
    Bene, ora vorrei ordinare gli elementi dentro guessdb[i].guess ma se digito

    qsort (guessdb.guess, dbcount, sizeof(guess_record*), compare_guesses);

    il compilatore mi comunica che il primo parametro è errato.
    So che normalmente se si ha un array di numeri, per esempio di nome "value[]",
    occorre semplicemente scrivere

    qsort (value, dbcount, sizeof(guess_record*), compare_guesses);

    ma come ripeto non ho a che fare con un semplice array ma con una struttura.

    Grazie infinite a tutti quelli che mi potranno aiutare

    Simo

  2. #2

    Re: Aiuto!!!Linguaggio c: funzione qsort, parametri

    Come ben spiegato nella documentazione di qsort la lista dei suoi argomenti deve essere:
    1. indirizzo di un array (tu invece gli passi un intero);
    2. numero degli elementi dell'array che gli hai passato nel primo argomento;
    3. dimensione dell'elemento dell'array (tu invece gli passi la dimensione di un puntare a guess_record);
    4. l'indirizzo di una funzione che effettuerà la comparazione tra gli elementi dell'array passatogli nel primo argomento.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Devi considerare l'array di strutture e passare la grandezza del singolo record

    qsort (guessdb, dbcount, sizeof(guess_record), compare_guesses);

    Nella funzione compare_guesses ti arriveranno due puntatori ai due elementi che stai comparando, ad esempio

    compare_guesses(const void *r1, const void *r2)

    e li utilizzerai per confrontare i due valori interi

    if(((guess_record*)r1)->guess > ((guess_record*)r2)->guess) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    9
    ragazzi siete dei grandi, lo so che per voi magari è poco ma per me è stato veramente grande il vostro aiuto! Non ho parole.. :-)

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Io alcune parole le ho: leggere il regolamento, specialmente la parte riguardante i titoli. Va bene aver specificato il linguaggio, ma non serve a nulla scrivere epiteti come Aiuto, Help, ecc..

    Correggo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.