我试图找到一种为特定颜色/单词指定值的方法。这只是我尝试的测试代码,但它没有用,有什么建议吗?输入=绿色和红色。输出= 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;
}
答案 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;
}