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");

}

相关推荐
0wioiw05 分钟前
Python基础(吃洋葱小游戏)
开发语言·python·pygame
栗子~~13 分钟前
Python实战- Milvus 向量库 使用相关方法demo
开发语言·python·milvus
狐凄15 分钟前
Python实例题:基于 Flask 的在线聊天系统
开发语言·python
狐凄15 分钟前
Python实例题:基于 Flask 的任务管理系统
开发语言·python
shootero@126.com32 分钟前
R语言开发记录,一
开发语言·r语言
勤奋的知更鸟35 分钟前
Java 编程之状态模式
java·开发语言·状态模式
沐知全栈开发44 分钟前
R 列表:深入解析与高效应用
开发语言
爱喝茶的小茶1 小时前
周赛98补题
开发语言·c++·算法
Whoisshutiao1 小时前
Python网安-zip文件暴力破解(仅供学习)
开发语言·python·网络安全
ComputerInBook2 小时前
C++ 标准模板库算法之 transform 用法
开发语言·c++·算法·transform算法