在C中按名称和数字引用数据

1 c

我有二十个左右的整数,我希望它们能够在设置时按名称引用,但我也希望能够像数字一样用数字来引用它们,所以我可以将它们打印出来一个接一个地使用for循环.任何想法如何在C中编码?这是我在伪代码中谈论的内容:

/* a data structure to keep a count of each make of car I own */
my_cars;

/* set the counts */
my_cars.saabs = 2;
my_cars.hondas = 3;
my_cars.porsches = 0;

/* print the counts */
for(all i in my_cars) {
    print my_cars[i];
}
Run Code Online (Sandbox Code Playgroud)

这是否过多地要求像C这样的低级语言?

eph*_*ent 7

struct car {
    const char *name;
    int count;
} my_cars[] = {{"Saab", 2}, {"Honda", 3}, {"Porsche", 0}};
int i;
for (i = 0; i < sizeof(my_cars) / sizeof(my_cars[0]); i++)
    printf("%s: %d\n", my_cars[i].name, my_cars[i].count);
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 6

为此,您应该使用数组而不是独立的数据字段

#include <stdio.h>

typedef enum CarType {
  CART_SAAB,
  CART_HONDA,
  CART_PORSHE,

  CART_COUNT_
} CarType;

typedef struct MyCars {
  unsigned ncars[CART_COUNT_];
} MyCars;

int main(void)
{
  MyCars my_cars = { 0 } ;
  unsigned i;

  my_cars.ncars[CART_SAAB] = 2;
  my_cars.ncars[CART_HONDA] = 3;

  for (i = 0; i < CART_COUNT_; ++i)
    printf("%u\n", my_cars.ncars[i]);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 5

C可以做任何其他语言都可以做的事情.这确实看起来像家庭作业,我打赌你应该用钥匙做一些东西.请记住,您的教师希望您使用他或她试图教您的数据结构.他并不是真的希望以任何随机的方式解决问题,他希望它能够解决你所讨论的主题.

因此,考虑一个包含字符串和计数的数据结构,一个可以搜索的数据结构,并提供执行此操作的功能.你可能会得到的是这个问题的好,专业,简单的解决方案.这不是你教练想要的......