2017-01-29 9 views
0

私は、ターミナルカラー(コマンドラインプログラム)を変更し、tccを使ってコンパイルするためにwindows.hを使用する単純な "カラーテキスト"プログラムを作成しようとしています。しかし、実際には通常は数字を渡すのではなく、与えられたテキスト(制御文字でも!)に応じてランダムな色を選択します。どのように私はそれを修正するだろうか?私は(すべての黒のテキストに私を持参してください)例タイプ0のために、私は代わりに、これを取得する場合Colortextプログラムが正しく色付けされていない

#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; 
} 

ので、:

not expected, should just make it black

EDITを:strlen(argv[1]);から*argv[1]が働い変えるように見えます。しかし、今は指定された入力の長さによって異なります。それは、背景と前景を正しく設定します(長さ0はエラーを返し、長さ1は1に、長さは何にでも設定します)。 "anti strlen" 、数字の多い文字列を作成して返します)は動作しません。

編集:atoi()を使用します。ただ、注意を払う

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

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

    getch(); 
    return 0; 
} 

conio.hはどの非スタンダールライブラリです:あなたは、Windows上にある場合は、conio.hを使用して、それをこのように使用することができ

#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

答えて

0

は、指定した色を得るです。

実際に通常通りに数字を渡すのではなく、argv[1]ではありません。「数字を渡す」!プログラムの引数はで、常にが文字列として渡されます。

SetConsoleTextAttributeは、コンソール文字の色を指定された値に設定します。 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 

はその後、あなたが送信されを何値のですか?文字列"0"の最初の文字 - つまり、48の小数点コード、または16進数の0x30です。これは定義を見て - BACKGROUND_BLUE + BACKGROUND_GREEN =シアンに下がります。

面白いことは、あなたが黒に黒をしたいために、コマンドの引数としてバイナリ0を入力する明白な方法はありません、です。私は、 "生"値ではなく、10進法または16進法で必要なカラーコードを入力し、strtolまたは同様の関数を使用してバイナリ値に変換することをお勧めします。

0

:私の問題を修正Unixには存在しません。

+0

conio.hはWindows用のtccでは動作しません(REDが何であるか、BLINK、またはtextcolor ...でもわかりません) – 180Five

+0

動作しない場合、 'curses 'で試してみてください。あなたの問題を解決することができる別のライブラリです。 –

関連する問題