int main()
{

  enum Days{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};

  Days TheDay;

  int j = 0;

  printf("Please enter the day of the week (0 to 6)\n");

  scanf("%d",&j);

  TheDay = Days(j);

  //how to PRINT THE VALUES stored in TheDay

  printf("%s",TheDay);  //   isnt working

  return 0;
}

推荐答案

C中的枚举是在代码中具有方便名称的数字.它们不是字符串,并且源代码中分配给它们的名称没有编译到您的程序中,因此在运行时无法访问它们.

获得所需内容的唯一方法是自己编写一个函数,将枚举值转换为字符串.例如(假设您将enum Days的声明移到main之外):

const char* getDayName(enum Days day) 
{
   switch (day) 
   {
      case Sunday: return "Sunday";
      case Monday: return "Monday";
      /* etc... */
   }
}

/* Then, later in main: */
printf("%s", getDayName(TheDay));

或者,您可以使用数组作为映射,例如.

const char* dayNames[] = {"Sunday", "Monday", "Tuesday", /* ... etc ... */ };

/* ... */

printf("%s", dayNames[TheDay]);

但在这里,您可能希望在枚举中指定Sunday = 0以确保安全...我不确定C标准是否要求编译器从0开始枚举,尽管大多数编译器是这样做的(我相信有人会 comments 确认或否认这一点).

C++相关问答推荐

如何在C中通过转换为char * 来访问float的字节表示?

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

与unions 的未定义行为

常数函数指针优化

字符串令牌化xpath表达式

_泛型控制表达式涉及数组碰撞警告的L值转换错误?

对于C中给定数组中的每个查询,如何正确编码以输出给定索引范围(1到N)中所有数字的总和?

Vcpkg的配置文件

如何使用唯一数字对整型进行分区

递归打印二维数组(C编程)

如何将两个uint32_t值交织成一个uint64_t?

如何使用空元素块声明指针数组

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

将复合文字数组用作临时字符串缓冲区是否合理?

意外的C并集结果

可以对两种 struct 类型中的任何一种进行操作的C函数

在分配内存后使用指针是未定义的行为吗?

如何在 C 中的 Postgres 函数的表中 for 循环

如何确定 C 程序中的可用堆内存

我怎样才能用c语言正常运行这两个进程?