我知道家庭作业帮助是回避的,但是,我有强烈的程序员障碍。
我最需要的是理解的帮助。
因此,当我获取变量 (&c) 的地址时,我知道我得到了一个地址到它在内存中的位置,但我不知道如何取消引用该地址以访问其特定值 ('b') 以在函数中进行比较(颜色(&c,总计)它在其中。
由于任务的要求,主不能以任何理由更改
typedef struct dragon
{
char *name;
char *color[3];
int numHead;
int numTail;
}dragon;
void color(char* color, dragon *d);
int main()
{
dragon total[4];
dragon_info(total);
char c = 'b';
color(&c, total);
return 0;
}
最终,我用这条线来查看颜色是否匹配
if(strcmp(color, d[currentDra].color[currentColor]);
在我使用下面的行之前,因为从我的第一个角度来看,他们会烧焦
if(color == d[currentDra].color[currentColor])
但是在调试了一段时间后,我意识到颜色只是一个地址
总的来说,我需要以某种方式使用地址获取颜色的值。 *颜色找不到该值。 颜色也没有。
函数的其余部分
void color(char *color, dragon *d)
{
char *colorList[5] = {"red","blue","white","green","yellow"};
int colorShow;
int knownColor = 1;
printf("what is color? ==== %pn", color);
if(*color == 'r')
{
colorShow = 0;
}
else if(*color == 'b')
{
colorShow = 1;
}
else if(*color == 'w')
{
colorShow = 2;
}
else if(*color == 'g')
{
colorShow = 3;
}
else if(*color == 'y')
{
colorShow = 4;
}
else
{
printf("Sorry that is an unknown color, exiting...n");
knownColor = 0;
}
//if a char then = numbers 0-1
//one loop for the dragons
if(knownColor)
{
printf("***All the %s dragons:***n", colorList[colorShow]);
int currentDra;
for(currentDra = 0; currentDra < 4; currentDra++)
{
//another loop for the colors of the dragon
int currentColor;
for(currentColor = 0; currentColor < 3; currentColor++)
{
//printf("%cnn", (char*)color);
if(strcmp(color, d[currentDra].color[currentColor]))
{
printf("%s is %sn", d[currentDra].name, colorList[colorShow]);
}
}
}
}
}
非常感谢,这是我的第一个问题。
if(strcmp(color, d[currentDra].color[currentColor]);
这不起作用,因为传递color
不是以 null 结尾的。因此,这是未定义的行为。
if(color == d[currentDra].color[currentColor])
这不起作用,因为您正在比较指针而不是它们引用的值。
如果dragon.color
是包含单个字符串的数组,则可以与:
if(color[0] == d[currentDra].color[currentColor][0])