Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23
  1. #11
    Originariamente inviato da FastMagister
    Il problema è proprio che ho quel vincolo....
    Come volevasi dimostrare.
    Si a questo punto la soluzione con i puntatori ed in intero come codice del tipo mi seembra la più semplice ed elegante.Per quanto riguarda il problema dell'accedere ai valori e non agli indirizzi di tali valori la soluzione te l'ho già fornita nel post precedente,devi solo lasciare tutto com'è e dopo il cast ad intero (che è corretto) del puntatore void accedi al suo valore con l'operatore di indirezione
    codice:
    *nome_puntatore
    .Magari prova e poi mi posti il codice modificato.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  2. #12
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Non è molto elegante farlo come dici tu perchè altrimenti dovrebbe passare le stringhe normalmente e gli interi con l'operatore "&" davanti. Io preferisco farlo con i ..., poi de gustibus non disputandum est.

  3. #13
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Non sono sicuro di ricordare, ma mi pare che in C non esista nessun modo per conoscere il tipo di una variabile, giusto ?

  4. #14
    Originariamente inviato da pprllo
    Non è molto elegante farlo come dici tu perchè altrimenti dovrebbe passare le stringhe normalmente e gli interi con l'operatore "&" davanti. Io preferisco farlo con i ..., poi de gustibus non disputandum est.
    Si è più elegante il tuo lo so,il problema è che abbiamo postato assieme ed il tuo io non l'avevo ancora letto quando ho postato.Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #15
    si, effettivamente la soluzione con ... credo sia la migliore.

    Solo un altra cosa: come fare se i due elementi che passo sono di un tipo composto da più campi e volessi confrontarli secondo un dato campo?

    Es:
    codice:
    struct data
    {
     int giorno;
     int mese;
     int anno;
    };
    E volessi confrontare data1 e data2 di tipo data secondo il campo anno?

    Grazie 1000 cmq per il prezioso aiuto

  6. #16
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Se sta parlando sempre di quella funzione potresti dare alla struct data 3 valori diversi di codicetipo, in modo tale che con 3 accede ad un campo, con 4 ad un altro e con 5 ad un altro ancora. Oppure potresti scegliere di usare solo un campo. In ogni caso viene tipo:

    codice:
    blablabla
    case x: r = (va_arg(p, data).giorno - va_arg(p, int).giorno); break;
    case y: r = (va_arg(p, data).mese - va_arg(p, int).mese); break;
    case z: r = (va_arg(p, data).anno- va_arg(p, int).anno); break;
    blablabla
    Oppure potresti fare una funzione che confronta tutti i campi dal più significativo al meno significativo:

    codice:
    blablabla
    case x: 
     		data a = va_arg(p, data), b = va_arg(p, data);
    		r = a.anno - b.anno;
    		if (!r) r = a.mese - b.mese;
    		if (!r) r = a.giorno - b.giorno;
    		break;
    blablabla
    Bisogna creare due strutture data all'inizio perchè ogni interrogazione di va_arg va a cercare il dato successivo, quindi usandolo 6 volte (2 per ogni confronto) arriveresti ad un inesistente 6° dato, con conseguente errore.

  7. #17
    Ottimo. Grazie 1000

  8. #18
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Non l'ho provato quindi non so se funziona ma a occhio dovrebbe andare

  9. #19
    Sapresti dirmi perche in case 3 (in pratica con i float) non funziona?

    codice:
    int Confronta(int i, ...)
    {
     int r;
     float c,d;
     struct data a, b;
     va_list p;
     va_start(p, i);
     switch(i)
     {
      case 1:  r = strcmp(va_arg(p, char *), va_arg(p, char *));
              break;
      case 2:  a = va_arg(p, struct data);
               b = va_arg(p, struct data);
    	        r = a.anno - b.anno;
    		     if(!r)
                r = a.mese - b.mese;
    		     if(!r)
                r = a.giorno - b.giorno;
    	       break;
      case 3:  c = va_arg(p, float);
               d = va_arg(p, float);
               r = c -d;
              break;
     }
     va_end(p);
     return r;
    }

  10. #20
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Non chiedermi come e perchè, ma se fai così funziona:
    codice:
    int Confronta(int i, ...)
    {
     int r;
     float c,d;
     struct data a, b;
     va_list p;
     va_start(p, i);
     switch(i)
     {
      case 1:  r = strcmp(va_arg(p, char *), va_arg(p, char *));
              break;
      case 2:  a = va_arg(p, struct data);
               b = va_arg(p, struct data);
    	        r = a.anno - b.anno;
    		     if(!r)
                r = a.mese - b.mese;
    		     if(!r)
                r = a.giorno - b.giorno;
    	       break;
      case 3:  c = va_arg(p, double); //Funziona anche se gli passi un float
               d = va_arg(p, double); //Funziona anche se gli passi un float
    
               r = c -d;
              break;
     }
     va_end(p);
     return r;
    }

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