Colortext程序不支持';不能正确着色
我试图用C语言编写一个简单的“彩色文本”程序,它使用windows.h更改终端颜色(命令行程序),并使用tcc进行编译。然而,它并没有像它应该的那样工作,而是根据给定的文本(甚至是控制字符!)选择一种随机颜色,而不是通常只传递数字。我该如何解决这个问题Colortext程序不支持';不能正确着色,c,colors,parameter-passing,command-line-arguments,argv,C,Colors,Parameter Passing,Command Line Arguments,Argv,我试图用C语言编写一个简单的“彩色文本”程序,它使用windows.h更改终端颜色(命令行程序),并使用tcc进行编译。然而,它并没有像它应该的那样工作,而是根据给定的文本(甚至是控制字符!)选择一种随机颜色,而不是通常只传递数字。我该如何解决这个问题 #include <stdio.h> #include <windows.h> int main(int argc, char *argv[]) { if (argc >= 3) { prin
#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;
}
如果您使用的是Windows,则可以使用
conio.h
并以以下方式使用它:
#include<stdio.h>
#include<conio.h>
int main(int argc, char** argv)
{
textcolor(RED);
cprintf("some stuff");
getch();
return 0;
}
#包括
#包括
int main(int argc,字符**argv)
{
文本颜色(红色);
cprintf(“一些东西”);
getch();
返回0;
}
请注意,conio.h
是Unix上不存在的非标准库。您将获得指定的颜色
这就是为什么:“……实际上只是传递数字……”但是argv[1]
不“传递数字”!程序参数始终作为字符串传递
将控制台字符颜色设置为提供的值。这些名称由位定义,但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
那么你寄了多少钱?字符串“0”
的第一个字符,即十进制代码48
,或十六进制0x30
。这–看看定义–归结为BACKGROUND\u BLUE+BACKGROUND\u GREEN
=青色
有趣的是,既然您想要黑对黑,就没有明显的方法输入二进制
0
作为命令参数。我建议您以十进制或十六进制表示法输入所需的颜色代码,而不是作为“原始”值,并使用strtol
或类似函数将其转换为二进制值。conio.h在tcc for Windows上不起作用(不知道红色是什么,或闪烁,甚至textcolor…),如果不起作用,您可以尝试使用curses.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