gpt4 book ai didi

c - 将固定整数附加到字符串

转载 作者:行者123 更新时间:2023-11-30 20:15:00 24 4
gpt4 key购买 nike

我正在尝试找到一种方法,以便当用户输入 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;
}

最佳答案

首先,您需要以分号 ; 结束每个语句。 , sum = ... 后面少了一个线。

旁注:当您声明这样的枚举类型时,我的意思是,从 0 开始并且增加一,您不必进行任何分配。你可以写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 是一个在两个字符串之间进行字典顺序比较的函数;如果第一个字符串小于,则返回负值,即可以在字典中较早找到,如果相反则返回正值,如果相同则返回零。

现在,我们只为第一个写了这个,它看起来已经很可怕了......从我们的 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 );应该为您提供您希望它们对应的个人值(value)观。

我已经删除了 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;
}

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

关于c - 将固定整数附加到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22622142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com