ho provato ad utilizzare dei bitfield per implementare una semplice struttura (x vedere come funzionano) ma nessuno dei case e degli if viene rispettato, e nn riesco a capire quindi come funzionino esattamente questi bitfield
posto il codice
codice:int main(int argc, char *argv[]) { struct confronti{ signed int apos :3; signed int aneg :3; signed int zpos :3; signed int zneg :3; signed int bpos :3; signed int bneg :3; signed int abpos :3; signed int abneg :3; unsigned int male: 1; unsigned int femal: 1; }chek; chek.zpos = 100; chek.zneg = 000; chek.apos = 101; chek.aneg = 001; chek.bpos = 110; chek.bneg = 010; chek.abpos = 111; chek.abneg = 011; chek.male = 1; chek.femal = 0; //* il suo sesso (maschio o femmina); //* il suo gruppo sanguigno (gruppo A, B, AB o 0, con fattore RH positivo o negativo); //* la sua età (entro limiti ragionevoli); //* il suo codice di servizio sanitario locale, che è composto da una lettera e 4 cifre decimali. struct persona{ // unsigned int sex : 1; signed int sex : 1; signed int blood : 3; signed short int age;//esiste un uomo in irlanda che e' morto a circa 200 anni quindi servono almeno 9 bit char *nome; char *cognome; }Sanity[10]; int i; int n; char a[3]; for(i=0;i<10;i++){ printf("Sesso: 1 Maschio. 0 Femmina "); scanf("%d",n); if (n==1)Sanity[i].sex = chek.male; else Sanity[i].sex = chek.femal; printf("gruppo sanguigno?"); scanf("%s",a); switch (a[0]){ case 'a' : { switch(a[1]){ case '+': Sanity[i].blood = chek.apos;break; case '-': Sanity[i].blood = chek.aneg;break; case 'b':{ switch (a[3]){ case '+': Sanity[i].blood = chek.abpos;break; case '-': Sanity[i].blood = chek.abneg;break; }}}}} if (Sanity[i].sex) printf("Maschio "); else printf("Femmina "); if (Sanity[i].blood == chek.apos)printf("gruppo sanguigno: A+\n"); if (Sanity[i].blood == chek.aneg)printf("gruppo sanguigno: A-\n"); if (Sanity[i].blood == chek.abpos)printf("gruppo sanguigno: AB+\n"); if (Sanity[i].blood == chek.abneg)printf("gruppo sanguigno: AB-\n"); } system("PAUSE"); return 0; }

Rispondi quotando

