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;
}