C 给颜色赋值

C 给颜色赋值,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

我正试图找到一种方法来为特定的颜色/单词赋值。这只是我尝试过的一个测试代码,但它不起作用,有什么建议吗?输入=绿色和红色。输出=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. 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这样做不会以多种不同的方式完成您希望它完成的任务。你应该在网上读些书。特别是,您应该重新审视宏语法,并认识到预处理器在编译阶段之前运行,因此在编译时(更不用说运行时)定义“不起作用”之前,名称就会丢失这样做不会以多种不同的方式完成您希望它完成的任务。你应该在网上读些书。特别是,您应该重新研究宏语法,并认识到预处理器在编译阶段之前运行,因此名称是