你能把一个字符串设置成一个宏吗
can you set a string to a macro
我试图让用户输入一种颜色,输出将是所选颜色的句子
我正在使用设置为变量的 ansi 转义码,我不确定最后一个如何工作
#define red "3[1;31m"
#define green "3[0;32m"
#define blue "3[0;34m"
#define magenta "3[0;35m"
#define yellow "3[0;33m"
#define cyan "3[0;36m"
int main()
{
char colour1[10];
printf("enter a colour");
scanf("%s", colour1);
printf("%s this is test\n ", red);
printf("%s another test \n", green);
printf("%s hello test ", colour1);
return 0;
}
也就是说,如果用户输入“blue”,它只会输出 blue 而不是颜色,
谢谢你
任何帮助将不胜感激
当您存储用户在 colour1
中输入的字符串(“blue”或“red”)时,您的 printf
会将其替换为“blue hello test”。但是,您想要的是“\033[0;34m hello test”之类的东西。为此,您需要以某种方式将用户的输入映射到您的颜色定义。
这可能是这样的:
//mapping and setting colour
if( 0 == strcmp(colour1, "blue") ) {
printf( %s, blue );
} else if ( 0 == strcmp(colour1, "red") ) {
printf( %s, red);
} else if (...) {
...
}
//printing your text
printf( "hello test\n" );
C 对字符串不是很好,我想还有很多其他方法可以将用户的输入映射到颜色,但是这应该会给你预期的结果。实现查找 table 可能会更好一些,正如其他人提到的那样,没有我在这里展示的 if else,但是将定义映射到输入的概念保持不变。
您似乎对宏的理解很混乱。宏替换由 pre-processor 执行,这是在实际编译之前的 one-step。因此,在程序编译之前,用户输入永远不会执行宏替换,实际上 运行!
这是 中建议的基于 lookup-table 的有效实施示例。
#include<string.h>
#include<stdio.h>
typedef struct colortable_t
{
char* name;
char* code;
} colortable_t;
const colortable_t colortable[] =
{
{ "red", "3[1;31m" },
{ "green", "3[0;32m" },
{ "blue", "3[0;34m" },
{ "magenta", "3[0;35m" },
{ "yellow", "3[0;33m" },
{ "cyan", "3[0;36m" },
};
const char *color_lookup(const char *str)
{
for(int i = 0; i < sizeof(colortable) / sizeof(colortable_t); i++)
{
if(strcmp(colortable[i].name, str) == 0)
return colortable[i].code;
}
return "";
}
int main()
{
char colour1[10];
printf("enter a colour");
scanf("%s", colour1);
printf("%s this is test\n ", color_lookup("red"));
printf("%s another test \n", color_lookup("green"));
printf("%s hello test ", color_lookup(colour1));
return 0;
}
我试图让用户输入一种颜色,输出将是所选颜色的句子 我正在使用设置为变量的 ansi 转义码,我不确定最后一个如何工作
#define red "3[1;31m"
#define green "3[0;32m"
#define blue "3[0;34m"
#define magenta "3[0;35m"
#define yellow "3[0;33m"
#define cyan "3[0;36m"
int main()
{
char colour1[10];
printf("enter a colour");
scanf("%s", colour1);
printf("%s this is test\n ", red);
printf("%s another test \n", green);
printf("%s hello test ", colour1);
return 0;
}
也就是说,如果用户输入“blue”,它只会输出 blue 而不是颜色, 谢谢你 任何帮助将不胜感激
当您存储用户在 colour1
中输入的字符串(“blue”或“red”)时,您的 printf
会将其替换为“blue hello test”。但是,您想要的是“\033[0;34m hello test”之类的东西。为此,您需要以某种方式将用户的输入映射到您的颜色定义。
这可能是这样的:
//mapping and setting colour
if( 0 == strcmp(colour1, "blue") ) {
printf( %s, blue );
} else if ( 0 == strcmp(colour1, "red") ) {
printf( %s, red);
} else if (...) {
...
}
//printing your text
printf( "hello test\n" );
C 对字符串不是很好,我想还有很多其他方法可以将用户的输入映射到颜色,但是这应该会给你预期的结果。实现查找 table 可能会更好一些,正如其他人提到的那样,没有我在这里展示的 if else,但是将定义映射到输入的概念保持不变。
您似乎对宏的理解很混乱。宏替换由 pre-processor 执行,这是在实际编译之前的 one-step。因此,在程序编译之前,用户输入永远不会执行宏替换,实际上 运行!
这是
#include<string.h>
#include<stdio.h>
typedef struct colortable_t
{
char* name;
char* code;
} colortable_t;
const colortable_t colortable[] =
{
{ "red", "3[1;31m" },
{ "green", "3[0;32m" },
{ "blue", "3[0;34m" },
{ "magenta", "3[0;35m" },
{ "yellow", "3[0;33m" },
{ "cyan", "3[0;36m" },
};
const char *color_lookup(const char *str)
{
for(int i = 0; i < sizeof(colortable) / sizeof(colortable_t); i++)
{
if(strcmp(colortable[i].name, str) == 0)
return colortable[i].code;
}
return "";
}
int main()
{
char colour1[10];
printf("enter a colour");
scanf("%s", colour1);
printf("%s this is test\n ", color_lookup("red"));
printf("%s another test \n", color_lookup("green"));
printf("%s hello test ", color_lookup(colour1));
return 0;
}