根据C中char的值分配char数组

时间:2014-09-18 06:03:02

标签: c

我试图通过条件赋予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";
  }

这段代码显然是错误的,但应该对我尝试做的事情有所了解。

我要么计划将一个正确的版本用于一个简单的程序,要么必须通过大约四倍的条件来手动打印所述字符串值,这将是一个巨大的痛苦。

3 个答案:

答案 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语句
    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);
 }