我制作了这个头文件,这个头文件应该让printf的颜色和格式化对我来说更容易,但不知何故,所有用于格式化的参数都来自默认情况下我可以告诉active(=1)的参数,尽管我已经默认将它们定义为关闭(=0)。在.c文件中将它们更改为off也不会改变任何内容
#include <stdio.h>
//parameters
short print_bold = 0;//1
short print_LessVisible = 0; //2
short print_cursive = 0;//3
short print_underline = 0;//4
short print_blinking = 0;//5
short print_SwapBackground = 0; //7
short print_SameBackground = 0;//8
short print_crossed = 0;//9
short print_LineOver = 0; //53
short print_HighIntensity = 0;
void text_color(unsigned short color){;
short print_mode_1 = (print_bold = 1);
short print_mode_2 = 2 * (print_LessVisible = 1);
short print_mode_3 = 3 * (print_cursive = 1);
short print_mode_4 = 4 * (print_underline = 1);
short print_mode_5 = 5 * (print_blinking = 1);
//print_mode_6 = print_mode_5
short print_mode_7 = 7 * (print_SwapBackground = 1);
short print_mode_8 = 8 * (print_SameBackground = 1);
short print_mode_9 = 9 * (print_crossed = 1);
short print_mode_53 = 53 * (print_LineOver = 1);
int color_value = 30 + color * (color < 8) + 60 * (print_HighIntensity = 1);
printf("\e[%d;%d;%d;%d;%d;%d;%d;%d;%d;%dm",print_mode_1,print_mode_2,print_mode_3,print_mode_4,print_mode_5,print_mode_7,print_mode_8,print_mode_9,print_mode_53,color_value);
}
void background_color(unsigned short color){
int color_value = 40 + color * (color < 8) + 60 * (print_HighIntensity = 1);
printf("\e[%dm",color_value);
}
发布于 2021-05-14 08:20:31
您正在混合使用赋值运算符=
和比较运算符==
。在分配print_bold = 1
之后,它必须是1
,而不是0
。
printf("%d\n", print_bold); // 0
short print_mode_1 = (print_bold = 1);
// ^^^ - assignment
// ^^^ - assignment
printf("%d\n", print_bold); // 1
赋值的结果就是赋值的值。print_mode_1 = (print_bold = 1);
等于:print_bold = 1; print_mode_1 = 1
。
将=
与==
混合在一起是一个经常发生的错误。如果要比较而不是赋值,请将=
更改为==
。
发布于 2021-05-14 08:41:57
在初始化print_mode变量和color_values时,我使用了=,就好像它是<或>这样的运算符。我将print_mode_x = x * (print_parameter = 1)
更改为print_mode_x = x * (print_parameter == 0)
。我使用无分支编程的原因是它允许我写更少的代码行(而且它实际上也更快)。
https://stackoverflow.com/questions/67530876
复制