问题描述
我制作了这个头文件,它应该让我更容易使用 printf 进行颜色和格式化,但不知何故,格式化的所有参数都来自我可以告诉的默认情况下 active(=1),尽管我已经定义了它们默认关闭(= 0)。将 .c 文件中的它们更改为关闭也不会改变任何内容
#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);
}
解决方法
您将比较运算符 ==
与赋值运算符 =
混合使用。分配 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
。
将 =
与 ==
混用是一个非常非常常见的错误,经常发生。如果要比较而不是分配,请将 =
更改为 ==
。
在初始化 print_mode 变量和 color_values 时,我使用了 =,就好像它是一个像 这样的运算符。我将 print_mode_x = x * (print_parameter = 1)
更改为 print_mode_x = x * (print_parameter == 0)
。我使用无分支编程的原因是它允许我编写更少的代码行(而且实际上速度也更快)。