c primer plus 第十五章课后编程6题

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

发布了85 篇原创文章 · 获赞 1 · 访问量 1889

猜你喜欢

转载自blog.csdn.net/Tekkenwxp/article/details/103169425