C Primer Plus(第六版)15.9 编程练习 第7题

//

// main.c

// 15.9-7

//

// Created by cjm on 2024/2/5.

//猜测题意是用一个unsigned long 64个位去储存全部信息,一共需要20位即可

//00000000 0000000 00 0 0 0

// ID size alignment B I U

#include <stdio.h>

#include <stdbool.h>

#include <string.h>

#include <limits.h>

#define MASK_U 1 //001

#define MASK_I 2 //010

#define MASK_B 4 //100

#define MASK_A 0x18 //11000

#define MASK_S 0xfe0 //111111100000

#define MASK_ID 0xff000 //11111111000000000000

void show_menu(unsigned long font_n);

int main()

{

printf("The number of bits in an unsigned long: %ld\n", CHAR_BIT * sizeof (unsigned long));//确认unsigned long的位数

unsigned long font_n;

char ch;

font_n=0b00000001000110001000;//初始化为题目的初始状态

int id,size = 0;

char alig;

show_menu(font_n);

while(scanf("%c",&ch)!=EOF&&ch!='q')

{

while(getchar()!='\n')

continue;

switch(ch)

{

case 'f':

puts("Enter font ID(0-255)");

scanf("%d", &id);

font_n=font_n&(~MASK_ID);

font_n=font_n+(id<<12);

show_menu(font_n);

break;

case 's':puts("Enter font size(0-127)");

scanf("%d",&size);

font_n=font_n&(~MASK_S);

font_n=font_n+(size<<5);

show_menu(font_n);

break;

case 'a':

puts("Select alignment:\nl) left\tc)center\tr)right\n");

scanf("%c",&alig);

while(getchar()!='\n')

continue;

font_n=font_n&(~MASK_A);//清空位

if(alig=='l')

font_n=font_n+8;

else if(alig=='r')

font_n=font_n+16;

show_menu(font_n);

break;

case 'b':

font_n^=MASK_B;

show_menu(font_n);

break;

case 'i':

font_n^=MASK_I;

show_menu(font_n);

break;

case 'u':

font_n^=MASK_U;;

show_menu(font_n);

break;

default :;break;

}

while(getchar()!='\n')

continue;

}

puts("Bye!\n");

return 0;

}

void show_menu(unsigned long font_n)

{

char ali[7];

if(((font_n>>3)&(MASK_A>>3))==0)

strcpy(ali,"center");

else if (((font_n>>3)&(MASK_A>>3))==1)

strcpy(ali,"left");

else if(((font_n>>3)&(MASK_A>>3))==2)

strcpy(ali,"right");

printf("ID\tSIZE\tALIGNMENT\tB\tI\tU\n");

printf("%lu\t%lu\t\t%s\t\t%s\t%s\t%s \n\n",

(font_n>>12)&(MASK_ID>>12),

(font_n>>5)&(MASK_S>>5),ali,

((font_n>>2)&(MASK_B>>2)) == true?"on":"off",

((font_n>>1)&(MASK_I>>1)) == true?"on":"off",

(font_n&MASK_U) == true?"on":"off");

printf("f)change font\ts)change size\ta)change alignment\nb)toggle bold\ti)toggle italic\tu)toggle underline\nq)quit\n");

}

相关推荐
社交怪人12 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生12 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588
山居秋暝LS12 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣12 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye1008612 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
AI科技星13 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡13 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~14 小时前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言
hhb_61814 小时前
Swift核心技术难点与实战案例解析
开发语言·ios·swift
一楼的猫14 小时前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作