//设计一位字段结构存储下面信息。
字体ID:0~255之间的一个数
字体大小:0~127之间的一个数
对齐:0~2之间的一个数表示左对齐,居中,右对齐
加粗:开(1)或闭(0)
斜体:开(1)或闭(0)
在程序中使用该结构来打印字体参数,并使用循环菜单来让用户改变参数。例如,该程序的一个运行示例如下:
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/, 该程序要用按位运算管理信息/
#include <stdio.h>
typedef struct
{
unsigned char fontID; // 字体ID (0-255)
unsigned char fontSize; // 字体大小 (0-127)
unsigned char alignment; // 对齐 (0-2)
unsigned char attributes; // 属性 (按位存储加粗、斜体、下划线)
} FontInfo;
// 属性位定义
#define BOLD_MASK 0x01 // 第0位:加粗
#define ITALIC_MASK 0x02 // 第1位:斜体
#define UNDERLINE_MASK 0x04 // 第2位:下划线
void printFontInfo(const FontInfo *font)
{
const char *alignments[] = {"left", "center", "right"};
printf("%d %d %s %s %s\n",
font->fontID,
font->fontSize,
alignments[font->alignment],
(font->attributes & BOLD_MASK) ? "on" : "off",
(font->attributes & ITALIC_MASK) ? "on" : "off",
(font->attributes & UNDERLINE_MASK) ? "on" : "off");
}
void changeFont(FontInfo *font)
{
printf("Enter new font ID (0-255): ");
scanf("%hhu", &font->fontID);
}
void changeSize(FontInfo *font)
{
printf("Enter new font size (0-127): ");
scanf("%hhu", &font->fontSize);
}
void changeAlignment(FontInfo *font)
{
printf("Enter new alignment (0-left, 1-center, 2-right): ");
scanf("%hhu", &font->alignment);
}
void toggleBold(FontInfo *font)
{
font->attributes ^= BOLD_MASK;
}
void toggleItalic(FontInfo *font)
{
font->attributes ^= ITALIC_MASK;
}
void toggleUnderline(FontInfo *font)
{
font->attributes ^= UNDERLINE_MASK;
}
int main()
{
FontInfo font = {1, 12, 0, 0};
char choice;
while (1)
{
printf("\nCurrent Font Info:\n");
printFontInfo(&font);
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");
printf("Choose an option: ");
scanf(" %c", &choice);
switch (choice)
{
case 'f':
changeFont(&font);
break;
case 's':
changeSize(&font);
break;
case 'a':
changeAlignment(&font);
break;
case 'b':
toggleBold(&font);
break;
case 'i':
toggleItalic(&font);
break;
case 'u':
toggleUnderline(&font);
break;
case 'q':
return 0;
default:
printf("Invalid choice. Please try again.\n");
}
}
return 0;
}
标签:运算,void,printf,MASK,FontInfo,attributes,font
From: https://www.cnblogs.com/yesiming/p/18363831