C 给颜色赋值
我正试图找到一种方法来为特定的颜色/单词赋值。这只是我尝试过的一个测试代码,但它不起作用,有什么建议吗?输入=绿色和红色。输出=6C 给颜色赋值,c,C,我正试图找到一种方法来为特定的颜色/单词赋值。这只是我尝试过的一个测试代码,但它不起作用,有什么建议吗?输入=绿色和红色。输出=6 #include <stdio.h> int main() #define green 2, red 3; { char bands, color1, color2; int mult; printf("Select how many bands the resistor has"); printf("\n A
#include <stdio.h>
int main()
#define green 2, red 3;
{
char bands, color1, color2;
int mult;
printf("Select how many bands the resistor has");
printf("\n A. 4 bands");
printf("\n B. 5 bands");
printf("\n C. 6 bands");
scanf("%c", &bands);
switch (bands)
case 'a':
case 'A':
printf("Enter the colors");
scanf("%s %s", &color1, &color2);
mult = color1 * color2;
printf("%d", mult);
getchar();
return 0;
}
#包括
int main()
#定义绿色2,红色3;
{
炭带,颜色1,颜色2;
int mult;
printf(“选择电阻器的频带数”);
printf(“\n A.4条带”);
printf(“\n B.5条带”);
printf(“\n C.6条带”);
scanf(“%c”和“&bands”);
开关(波段)
案例“a”:
案例“A”:
printf(“输入颜色”);
scanf(“%s%s”、&color1和&color2);
mult=color1*color2;
printf(“%d”,mult);
getchar();
返回0;
}
当您执行以下操作时:
#define green 2, red 3;
您正在定义一个扩展为2、红色3的宏green
代码>
您需要做的是:
#define green 2
#define red 3
但如果可以,更好的方法是避免使用宏:
enum { green = 2, red = 3 };
当您这样做时:
#define green 2, red 3;
您正在定义一个扩展为2、红色3的宏green
代码>
您需要做的是:
#define green 2
#define red 3
但如果可以,更好的方法是避免使用宏:
enum { green = 2, red = 3 };
有多种方法可以解决你的问题
解决方案1:正确使用#定义
替换
#define green 2, red 3;
#define green 2, red 3;
#define green 2, red 3;
借
解决方案2:使用const
变量
替换
#define green 2, red 3;
#define green 2, red 3;
#define green 2, red 3;
借
解决方案3:使用enum
替换
#define green 2, red 3;
#define green 2, red 3;
#define green 2, red 3;
借
有多种方法可以解决你的问题
解决方案1:正确使用#定义
替换
#define green 2, red 3;
#define green 2, red 3;
#define green 2, red 3;
借
解决方案2:使用const
变量
替换
#define green 2, red 3;
#define green 2, red 3;
#define green 2, red 3;
借
解决方案3:使用enum
替换
#define green 2, red 3;
#define green 2, red 3;
#define green 2, red 3;
借
您所使用的#define
指令将指示预处理器将所有匹配绿色
的符号替换为您定义的字符串,在本例中为2,红色3代码>
但是,您的文件中没有绿色的符号,因此#define
将不起任何作用
#define
指令不会对变量产生任何影响。您必须手动检查变量,看看它们是否等于您关心的任何常量。当前,与删除#define
行相比,您的程序的执行不会有任何不同。如果要定义字符串和整数之间的映射,则需要采用不同的方法
此外,如果颜色变量要包含多个字符,则需要将其定义为字符数组。通过在scanf中指定%s
,您将在单个字符中存储多个字符,这将导致内存损坏
这是您的程序的一个修正版本,它将颜色映射作为一个函数
#include <stdio.h>
#include <string.h>
#define MAX_COLOR_STR_LEN 10
int valueFromColor(char const * const color)
{
if(strcmp("green", color)==0)
return 2;
if(strcmp("red", color)==0)
return 3;
return 0;
}
int main()
{
char bands;
char color1[MAX_COLOR_STR_LEN];
char color2[MAX_COLOR_STR_LEN];
int mult;
printf("Select how many bands the resistor has");
printf("\n A. 4 bands");
printf("\n B. 5 bands");
printf("\n C. 6 bands");
scanf("%c", &bands);
switch (bands)
case 'a':
case 'A':
printf("\nEnter the colors");
scanf("%s %s", color1, color2);
mult = valueFromColor(color1) * valueFromColor(color2);
printf("%d", mult);
getchar();
return 0;
}
#包括
#包括
#定义最大颜色长度10
int valueFromColor(字符常量*常量颜色)
{
如果(strcmp(“绿色”,颜色)==0)
返回2;
如果(strcmp(“红色”,颜色)==0)
返回3;
返回0;
}
int main()
{
炭带;
char color1[MAX_COLOR_STR_LEN];
字符颜色2[最大颜色长度];
int mult;
printf(“选择电阻器的频带数”);
printf(“\n A.4条带”);
printf(“\n B.5条带”);
printf(“\n C.6条带”);
scanf(“%c”和“&bands”);
开关(波段)
案例“a”:
案例“A”:
printf(“\n输入颜色”);
扫描频率(“%s%s”,颜色1,颜色2);
mult=valueFromColor(颜色1)*valueFromColor(颜色2);
printf(“%d”,mult);
getchar();
返回0;
}
您使用的#define
指令将指示预处理器将所有匹配绿色
的符号替换为您定义的字符串,在本例中为2,红色3代码>
但是,您的文件中没有绿色的符号,因此#define
将不起任何作用
#define
指令不会对变量产生任何影响。您必须手动检查变量,看看它们是否等于您关心的任何常量。当前,与删除#define
行相比,您的程序的执行不会有任何不同。如果要定义字符串和整数之间的映射,则需要采用不同的方法
此外,如果颜色变量要包含多个字符,则需要将其定义为字符数组。通过在scanf中指定%s
,您将在单个字符中存储多个字符,这将导致内存损坏
这是您的程序的一个修正版本,它将颜色映射作为一个函数
#include <stdio.h>
#include <string.h>
#define MAX_COLOR_STR_LEN 10
int valueFromColor(char const * const color)
{
if(strcmp("green", color)==0)
return 2;
if(strcmp("red", color)==0)
return 3;
return 0;
}
int main()
{
char bands;
char color1[MAX_COLOR_STR_LEN];
char color2[MAX_COLOR_STR_LEN];
int mult;
printf("Select how many bands the resistor has");
printf("\n A. 4 bands");
printf("\n B. 5 bands");
printf("\n C. 6 bands");
scanf("%c", &bands);
switch (bands)
case 'a':
case 'A':
printf("\nEnter the colors");
scanf("%s %s", color1, color2);
mult = valueFromColor(color1) * valueFromColor(color2);
printf("%d", mult);
getchar();
return 0;
}
#包括
#包括
#定义最大颜色长度10
int valueFromColor(字符常量*常量颜色)
{
如果(strcmp(“绿色”,颜色)==0)
返回2;
如果(strcmp(“红色”,颜色)==0)
返回3;
返回0;
}
int main()
{
炭带;
char color1[MAX_COLOR_STR_LEN];
字符颜色2[最大颜色长度];
int mult;
printf(“选择电阻器的频带数”);
printf(“\n A.4条带”);
printf(“\n B.5条带”);
printf(“\n C.6条带”);
scanf(“%c”和“&bands”);
开关(波段)
案例“a”:
案例“A”:
printf(“\n输入颜色”);
扫描频率(“%s%s”,颜色1,颜色2);
mult=valueFromColor(颜色1)*valueFromColor(颜色2);
printf(“%d”,mult);
getchar();
返回0;
}
#定义绿色2,红色3代码>这样做不会以多种不同的方式完成您希望它完成的任务。你应该在网上读些书。特别是,您应该重新审视宏语法,并认识到预处理器在编译阶段之前运行,因此在编译时(更不用说运行时)定义“不起作用”之前,名称就会丢失代码>这样做不会以多种不同的方式完成您希望它完成的任务。你应该在网上读些书。特别是,您应该重新研究宏语法,并认识到预处理器在编译阶段之前运行,因此名称是