为颜色指定值

时间:2014-04-06 04:48:11

标签: 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. 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;
}

3 个答案:

答案 0 :(得分:4)

当你这样做时:

#define green 2, red 3;

您正在定义一个扩展为green的宏2, red 3;

您需要做的是:

#define green 2
#define red 3

但更好的方法是在可以的情况下避免使用宏:

enum { green = 2, red = 3 };

答案 1 :(得分:1)

您可以通过多种方式解决问题。

解决方案1:正确使用#define

替换

#define green 2, red 3;

通过

#define green 2
#define red 3

解决方案2:使用const变量

替换

#define green 2, red 3;

通过

const int green = 2;
const int red = 3;

解决方案3:使用enum

替换

#define green 2, red 3;

通过

enum KNOWN_COLORS { green=2, red };

答案 2 :(得分:0)

您将使用#define指令指示预处理器将所有符合green的符号替换为您定义的字符串,在本例中为2, red 3;

但是,您的文件中没有green个符号,因此#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;
}