Colortext程序没有正确着色

时间:2017-01-29 10:03:05

标签: 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) {
        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(这应该把我带到所有黑色文本),我反而得到这个:

not expected, should just make it black

编辑:将*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;
};

enter image description here

2 个答案:

答案 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或类似函数将其转换为二进制值。