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

}

相关推荐
快乐就好ya32 分钟前
Java多线程
java·开发语言
CS_GaoMing1 小时前
Centos7 JDK 多版本管理与 Maven 构建问题和注意!
java·开发语言·maven·centos7·java多版本
2401_858120532 小时前
Spring Boot框架下的大学生就业招聘平台
java·开发语言
转调2 小时前
每日一练:地下城游戏
开发语言·c++·算法·leetcode
Java探秘者2 小时前
Maven下载、安装与环境配置详解:从零开始搭建高效Java开发环境
java·开发语言·数据库·spring boot·spring cloud·maven·idea
2303_812044463 小时前
Bean,看到P188没看了与maven
java·开发语言
秋夫人3 小时前
idea 同一个项目不同模块如何设置不同的jdk版本
java·开发语言·intellij-idea
不穿格子衬衫3 小时前
常用排序算法(下)
c语言·开发语言·数据结构·算法·排序算法·八大排序
萧鼎3 小时前
Python调试技巧:高效定位与修复问题
服务器·开发语言·python
wdxylb3 小时前
使用C++的OpenSSL 库实现 AES 加密和解密文件
开发语言·c++·算法