c - 从用户获取枚举值

标签 c enums

我想知道如何从用户“今天”将枚举值获取到枚举变量中,而不是像给定示例中那样通过初始化它。 我是否必须使用 scanf 来字符串数组并使 Today = 字符串数组?

#include <stdio.h>
enum week{ sunday, monday, tuesday, wednesday, thursday, friday, saturday};
int main(){
enum week today;
today=wednesday;
printf("%d day",today+1);
return 0;
} 

最佳答案

这对于普通的枚举来说是不可能的。一个经典的技巧是使用 const char* 数组来扩充枚举,其中以与枚举相同的顺序存储名称。然后,您可以使用枚举值作为数组的索引来检索相应的字符串值。

// enum to string
printf("%s\n", week_str[MONDAY]);
// string to enum
const char* input = "tuesday"; // get this from scanf or something
size_t length = strlen(input);
int i;
int found = -1;
for (i = 0; i <= WEDNESDAY; i++) {
  if(strncmp(input, week_str[i], length) == 0) {
    found = i;
    break;
  }
}
printf("Found: %i", found);

关于c - 从用户获取枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177098/

相关文章:

java - 具有 Java 枚举的单例类,用于在多线程应用程序中保存全局状态

java - 设计枚举通用行为

c - 释放导致崩溃

c - 如何加入卡在阻塞 IO 上的线程?

Java JNA UCHAR 和 PUCHAR

java - varargs 的非常奇怪的编译错误

c - 从 C 项目中提取所有枚举的最佳方法

c - 如何在我的结构中使用类型定义的枚举?

c - main() 函数中简单程序的段错误错误

c - C中循环队列的数据结构