我试图制作一个简单的彩色文字" 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;
}
所以,如果我举例如0(这应该把我带到所有黑色文本),我反而得到这个:
编辑:将*argv[1]
更改为strlen(argv[1]);
似乎有效。但是,现在它取决于指定输入的长度,而不是给定的数字。它至少正确地设置背景和前景(长度为0给出错误,长度为1将其更改为1,任何长度设置为任何等等),并使用&#34;反strlen&#34 ; (取一个数字,并生成一个带有多个字母的数字的字符串,并将其返回)不起作用。
编辑:使用atoi();解决了我的问题:
#include <windows.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), atoi(argv[1]));
return 0;
};
答案 0 :(得分: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
是一个非标准库,在Unix上不存在。
答案 1 :(得分:0)
您 获取您指定的颜色。
原因如下:“......而不是实际上只是正常传递数字......”但是uniqueKey2
不“传递数字”!程序参数始终作为字符串传递。
SetConsoleTextAttribute
将控制台字符颜色设置为提供的值。 character attributes由位定义,但MSDN页面仅列出其符号名称。查看argv[1]
会显示他们的实际作业:
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_BLUE + BACKGROUND_GREEN
作为命令参数。我建议您输入十进制或十六进制表示法所需的颜色代码,而不是“原始”值,并使用0
或类似函数将其转换为二进制值。