首页 > 试题广场 >

设计一个位字段结构用来存储以下信息: Font

[问答题]

设计一个位字段结构用来存储以下信息:

Font ID:0到255之间的一个数

Font Size:0到127之间的一个数

Bold: Off (0)或on (1)

Italic: Off (0)或on (l)

Underline: Off (0)或on (1)

在程序中使用这个结构来显示字体参数,并使用循环的菜单来让用户改变参数。例如,程序的一个运行示例如下:

ID SIZE ALIGNMENT   B   I   U

1   12   left     off off off

f)change font    s)change size    a)change alignment

b)toggle bold    i)toggle italic  u)toggle underline

q)quit

s

Enter font size (0-127): 36

ID SIZE ALIGNMENT   B   I   U

1   36   left     off off off

f)change font    s)change size    a)change alignment

b)toggle bold    i)toggle italic  u)toggle underline

q)quit

a

Select alignment:

l)left   c)center   r)right

r

ID SIZE ALIGNMENT   B   I   U

1   36  right     off off off

f)change font    s)change size    a)change alignment

b)toggle bold    i)toggle italic  u)toggle underline

q)quit

i

ID SIZE ALIGNMENT   B   I   U

1   36  right     off  on off

f)change font    s)change size    a)change alignment

b)toggle bold    i)toggle italic  u)toggle underline

q)quit

q

Bye!

达个程序应该使用&操作符和合适的掩码来保证Font ID和Font size信息被转换到指定的范围内。

推荐
#include <stdio.h>
struct {
 unsigned int id   : 8 ;
 unsigned int size  : 7 ;
 unsigned int alignment : 2 ;
 unsigned int bold  : 1 ;
 unsigned int italic  : 1 ;
 unsigned int underline : 1 ;
}font;
char align[3][7]={"left", "center", "right"};
char on_off[2][4]={"off", "on"};
int main(void)
{
 int n;
 char command[5];
 while(1)
 {
 printf("%-14s%-14s%-14s%-14s%-14s%-14s\n", "ID", "SIZE", "ALIGNMENT", "B", "I", "U");
 printf("%-14d%-14d%-14s%-14s%-14s%-14s\n", font.id, font.size, align[font.alignment], on_off[font.bold], on_off[font.italic], on_off[font.underline] );
 printf("f)change font    s)change size    a)change alignment\n");
 printf("b)toggle bold    i)toggle italic  u)toggle underline\n");
 printf("q)quit\n");
 gets(command);
 switch(command[0])
 {
 case 'f' : printf("Enter font ID (0-255): ");
 scanf("%d", &n);
 getchar();
 font.id = n;
 break;
 case 's' : printf("Enter font size (0-127): ");
 scanf("%d", &n);
 getchar();
 font.size = n;
 break;
 case 'a' : printf("Select alignment:\nl)left   c)center   r)right\n");
 gets(command); 
 switch(command[0])
 {
 case 'l' : font.alignment = 0; break;
 case 'c' : font.alignment = 1; break;
 case 'r' : font.alignment = 2; break;
 default  : puts("error!");  break;
 }
 break;
 case 'b': font.bold = !font.bold;
 break;
 case 'i': font.italic = !font.italic;
 break;
 case 'u': font.underline = !font.underline;
 break;
 default : puts(command);
 return 0;
 }
 }
}

发表于 2018-03-14 11:57:22 回复(0)