将修复整数附加到字符串

时间:2014-03-24 22:46:13

标签: c

我试图找到一种方法,这样当用户输入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;
}

1 个答案:

答案 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 + 0first,最后一个地址为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 );应该会为您提供您希望与之对应的各个值。

我已删除您拥有的enumstring.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;
}

现在,我认为它符合我认为您希望它做的事情。