位运算

//设计一位字段结构存储下面信息。
字体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;
}

posted on 2024-08-16 23:22  wessf  阅读(1)  评论(0编辑  收藏  举报