Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colortext程序不支持';不能正确着色_C_Colors_Parameter Passing_Command Line Arguments_Argv - Fatal编程技术网

Colortext程序不支持';不能正确着色

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

我试图用C语言编写一个简单的“彩色文本”程序,它使用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;
}

如果您使用的是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