我试图找到一种方法,这样当用户输入2种颜色时,程序会自动给出每个我选择的整数值。
示例:
#include <stdio.h>
#include <math.h>
enum color {
black = 0,
brown = 1,
red = 2,
orange = 3,
yellow = 4,
green = 5,
blue = 6,
purple = 7,
grey = 8,
white = 9
} colors;
int main(){
int sum;
char first, second;
printf("enter the first 2 colors");
scanf("%s %s", &first, &second);
sum = first + second
printf("%d", colors);
getch();
return 0;
}
答案 0 :(得分:2)
首先,您需要以分号;
结束每个语句,sum = ...
行之后缺少分号。
只是旁注:当你宣布这样的枚举类型时,我的意思是,从0
开始并增加1,你不必进行任何分配。你可以写enum color { black, brown, red, ... } colors;
,它会是一样的。
根据您在评论中的回答,您似乎想要打印sum
而不是colors
。为此,请更改printf
这样的行:
printf( "%d", sum );
另一件事;你不能在一个字符内存储一系列字符。要存储一系列字符,您需要一个可以容纳一系列字符的存储空间。一种方法是声明一个字符数组,如下所示:
char first[15];
当您这样做时,您的计算机会自动为您分配15 * sizeof( char )
大内存,其中一个是first[0]
,最后一个是first[14]
。第一个地址为first + 0
或first
,最后一个地址为first + 14
。
其他方式是手动分配内存,我不会进入。
因此,要获得两个字符串,您的代码应如下所示:
char first[15];
char second[15];
scanf( "%s %s", first, second );
// notice that I omitted the ampersands (&)
// since first and second are already the addresses
现在悲伤的部分:你无法做到你想要的那样。变量名称,枚举类型标签......它们都只是标签,它们对计算机没有任何意义。
然而,你可以通过许多方式做你想做的事。我会为您提供最简单的一个:
// I didn't say it will look beautiful...
#include <string.h>
...
int firstID;
if ( strcmp( "black", first ) == 0 )
firstID = 0;
else if ( strcmp( "brown", first ) == 0 )
firstID = 1;
else if ( strcmp( "red", first ) == 0 )
firstID = 2;
else if ( strcmp( "orange", first ) == 0 )
firstID = 3;
else if ( strcmp( "yellow", first ) == 0 )
firstID = 4;
else if ( strcmp( "green", first ) == 0 )
firstID = 5;
else if ( strcmp( "blue", first ) == 0 )
firstID = 6;
else if ( strcmp( "purple", first ) == 0 )
firstID = 7;
else if ( strcmp( "grey", first ) == 0 )
firstID = 8;
else if ( strcmp( "white", first ) == 0 )
firstID = 9;
else
firstID = -1;
无论如何,检查您所拥有的字符串是否与您希望拥有的字符串匹配是必要的。 strcmp
是一个在两个字符串之间进行字典比较的函数;如果第一个字符串 less 而不是第二个字符串,则返回负值,即可以在字典中找到,如果相反则为正数,如果相反则为零。
现在,我们已经写过,仅针对第一个,它已经看起来很可怕了......将这个东西从我们的main
中抽象出来并将其放入一个内容中是一个好主意。功能。让我们将函数调用colorID
,并将其定义如下:
int colorID( char colorname[] ){
if ( strcmp( "black", colorname ) == 0 )
return 0;
else if ( strcmp( "brown", colorname ) == 0 )
return 1;
else if ( strcmp( "red", colorname ) == 0 )
return 2;
else if ( strcmp( "orange", colorname ) == 0 )
return 3;
else if ( strcmp( "yellow", colorname ) == 0 )
return 4;
else if ( strcmp( "green", colorname ) == 0 )
return 5;
else if ( strcmp( "blue", colorname ) == 0 )
return 6;
else if ( strcmp( "purple", colorname ) == 0 )
return 7;
else if ( strcmp( "grey", colorname ) == 0 )
return 8;
else if ( strcmp( "white", colorname ) == 0 )
return 9;
else
return -1;
}
现在,将其称为colorID( first );
和colorID( second );
应该会为您提供您希望与之对应的各个值。
我已删除您拥有的enum
,string.h
包含#include <string.h>
(strcmp
),上面添加了colorID
函数,并且然后将main
更改为如下所示:
int main( ){
int sum;
char first[15], second[15];
printf( "enter the first 2 colors" );
scanf( "%14s %14s", &first, &second );
// 14's between % and s are to limit the amount of characters
// that will be obtained and written
sum = colorID( first ) + colorID( second );
printf( "%d", sum );
getch( );
return 0;
}
现在,我认为它符合我认为您希望它做的事情。