Colortext 程序无法正确着色

Colortext program doesn't color properly

我正在尝试用 C 编写一个简单的 "color text" 程序,它使用 windows.h 更改终端颜色(命令行程序)并使用 tcc 进行编译。然而,它并没有像它应该的那样工作,而是根据给定的文本(甚至是控制字符!)选择一种随机颜色,而不是实际上只是正常地传递数字。我该如何解决?

#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[]) {
    if (argc >= 3) {
        printf("Too many arguments specified.");
        return 1;
    }
    if (argc == 1) {
        printf("No arguments specified. Please specify one.");
        return 1;
    }
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), *argv[1]);
    return 0;
}

所以,例如,如果我输入 0(这应该会把我带到全黑文本),我反而会得到这个:

编辑:看起来将 *argv[1] 更改为 strlen(argv[1]); 有效。但是,现在它取决于指定的输入长度,而不是给定的数字。它至少正确设置了背景和前景(长度为 0 会出错,长度为 1 会将其更改为 1,长度为 whatever 将其设置为 whatever,等等),并使用 "anti strlen"(需要一个数字,并用数字组成一个字符串很多字母,并且returns它)不起作用。

编辑:使用 atoi();解决了我的问题:

#include <windows.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), atoi(argv[1]));
    return 0;
};

如果您在 Windows 上,您可以使用 conio.h 并以这种方式使用它:

#include<stdio.h>
#include<conio.h>

int main(int argc, char** argv)
{
   textcolor(RED);
   cprintf("some stuff");

   getch();
   return 0;
}

请注意,conio.h是一个 non-standart 库,在 Unix 上不存在。

正在获得您指定的颜色。

原因如下:“.. 而不是通常只是传递数字……”但是 argv[1] 不是 "pass a number"!程序参数总是作为字符串传递。

SetConsoleTextAttribute sets the console character color to the value provided. The character attributes 由位定义,但该 MSDN 页面仅列出了它们的符号名称。查看 wincon.h 显示了他们的实际分配:

#define FOREGROUND_BLUE 1
#define FOREGROUND_GREEN    2
#define FOREGROUND_RED  4
#define FOREGROUND_INTENSITY    8
#define BACKGROUND_BLUE 16
#define BACKGROUND_GREEN    32
#define BACKGROUND_RED  64
#define BACKGROUND_INTENSITY    128

你发送的值do是多少?字符串的第一个字符 "0" – 即十进制代码 48,或十六进制 0x30。这——看看定义——归结为 BACKGROUND_BLUE + BACKGROUND_GREEN = cyan.

有趣的是,因为你想要 black-on-black,所以没有明显的方法来输入 binary 0 作为命令参数。我建议您以十进制或十六进制表示法输入所需的颜色代码,而不是作为 "raw" 值,然后使用 strtol 或类似函数将其转换为二进制值。