#include <stdio.h>
#include <stdbool.h>
struct set_up {
unsigned int id : 8;
unsigned int size : 8;
unsigned int : 2;
unsigned int alignment : 2;
unsigned int : 4;
bool b : 1;
unsigned int : 2;
bool i : 1;
unsigned int : 3;
bool u : 1;
};
union views /把数据看作结构 unsigned int 类型的变量/
{
struct set_up st_view;
unsigned int us_view;
};
int font_id(unsigned int n);
int size_size(unsigned int n);
char *a_alignment(unsigned int n);
int main(void)
{
union views box={ {0,0,0,0,0,0} };
char choice;
char * aligt=“left”;
puts("f)chane font s)change size a)change alignment");
puts("b)toggle bold i)toggle italic u)toggle underline");
puts("q)quit");
while(scanf("%c",&choice)==1 && choice!='q')
{
while(getchar()!='\n')
continue;
switch(choice)
{
case 'f': box.st_view.id=font_id(box.st_view.id);
break;
case 's': box.st_view.size=size_size(box.st_view.size);
break;
case 'a': aligt=a_alignment(box.st_view.alignment);
break;
case 'b': box.st_view.b^=1;
break;
case 'i': box.st_view.i^=1;
break;
case 'u': box.st_view.u^=1;
break;
}
printf(" ID SIZE ALIGNMENT B I U\n");
printf("%3d%8d%11s",box.st_view.id,box.st_view.size,aligt);
printf("%6s",(box.st_view.b==0)?"off":"on");
printf("%8s",(box.st_view.i==0)?"off":"on");
printf("%8s",(box.st_view.u==0)?"off":"on");
printf("\n\n");
puts("f)chane font s)change size a)change alignment");
puts("b)toggle bold i)toggle italic u)toggle underline");
puts("q)quit");
}
return 0;
}
int font_id(unsigned int n)
{
int num;
printf(“请输入字体ID号(0–255)\n”);
scanf("%d",&num);
num&=255;
while(getchar()!='\n')
continue;
return num;
}
int size_size(unsigned int n)
{
int num;
printf("enter font size(0--127):");
scanf("%d",&num);
num&=127;
while(getchar()!='\n')
continue;
return num;
}
char *a_alignment(unsigned int n)
{
static char num1[10]=“left”;
static char num2[10]=“center”;
static char num3[10]=“right”;
char c;
printf(“Select alignment:\n”);
printf(“l)left c)center r)right\n”);
while(scanf("%c",&c)==1)
{
if(c!=‘l’ && c!=‘c’ && c!=‘r’)
{
printf(“Select alignment:\n”);
printf(“l)left c)center r)right\n”);
getchar();
continue;
}
else
break;
}
while(getchar()!=’\n’)
continue;
if(‘l’==c)
return num1;
else if(‘c’==c)
return num2;
else if(‘r’==c)
return num3;
return 0;
}