我试图通过条件赋予char数组(或字符串)的特定值,具体取决于char的值。
假设c是在代码之前声明的具有某种特定值的char。
char fruit[];
if (c == 'R') {
fruit[] = "Red";
}
else if (c == 'Y') {
fruit[] = "Yellow";
}
else if (c == 'G') {
fruit[] = "Green";
}
else if (c == "B") {
fruit[] = "Blue";
}
这段代码显然是错误的,但应该对我尝试做的事情有所了解。
我要么计划将一个正确的版本用于一个简单的程序,要么必须通过大约四倍的条件来手动打印所述字符串值,这将是一个巨大的痛苦。
答案 0 :(得分:4)
char *color; // for modern compilers, should be const char *color
switch (c)
{
case 'R': color = "Red"; break;
case 'Y': color = "Yellow"; break;
case 'G': color = "Green"; break;
case 'B': color = "Blue"; break;
default: color = "<unknown>"; break;
}
我对不合逻辑的变量名称进行了例外处理,因此将fruit
重命名为color
,但这种方法是实现我认为您要求的一种方法。
答案 1 :(得分:2)
执行此操作的最佳方法是使用switch语句,但您首先需要告诉编译器您希望fruit[]
有多大,如果您不打算根据您检测到的字符动态分配它。
除非你打算处理那些带有真正长名字的颜色的水果,否则我说16个字符足以进行演示。因此:
#include <stdio.h>
#include <string.h>
void fruity_printer(char c) {
char fruit[16] = { 0 }; // initialize your arrays!
现在,对char c
switch (c) {
case 'R':
strcpy(fruit, "Red");
break;
// add more cases as needed
default: // what happens if we don't have a case for it?
strcpy(fruit, "Rainbow");
break;
}
printf("The fruitabulous color is: %s\n", fruit);
return;
}
请注意,我在这里使用了strcpy()
,因为我确定我知道我会在目的地的范围内写作。你永远不会随意复制那些长度在编译时都不知道的东西,你可以使用strncpy()
来代替,这需要另一个参数作为长度。
您还想要做的事情是将果味打印机中的c
转换为上限或下限,这样您就不必处理这两种情况。
另一种方法是动态分配你的内存,但只需使用一个简单的开关,最好的方法是找出它应该是什么。
答案 2 :(得分:0)
您可以使用switch
案例:
#include<stdio.h>
#include<string.h>
int main (int argc, char *argv[])
{
char c;
char fruit[100];
printf("Enter the character: ");
scanf(" %c",&c);
switch(c)
{
case 'R' : strcpy(fruit,"Red"); break;
case 'Y' : strcpy(fruit,"Yellow"); break;
case 'G' : strcpy(fruit,"Green"); break;
case 'B' : strcpy(fruit,"Blue"); break;
default : puts("No color");
}
printf("%s\n",fruit);
}