Ознакомьтесь с документацией на C / C ++ для "%" и макросов - "#define".Для этой проблемы переключатели не нужны, неэффективны и делают код длинным.
Приращение и модуль могут использоваться для приращения месяца.Перечислить значение в sting можно с помощью макроса, который заменяет код значения строкой, содержащей тот же код.
Перечисление в строку с использованием макросов: Ссылка MSDN - оператор Stringizing (#)
Существует много способов использовать это для преобразования перечислений в строки ( Google it ), в том числе:
// Use correct number of parameters here (can use multiple macros)
#define ENUM_MACRO(name, offset, v1, v2, v3, v3)\
enum name { v1 = offset, v2, v3, v4};\
const char name##Strings[] = { #v1, #v2, #v3 };\
const char* name##ToString(value) { return name##Strings[value - offset]; }
// This way you do not have two different
// lists of months to maintain in your code
// (the preprocessor creates them)
ENUM_MACRO(Month, 1, January, February, March);
//
// usage:
//
Month month = Month::Janurary;
const char* st = MonthToString(month);
//
// Incrementing month taking offset (1) and max (12) into account
//
month = (month + 1) % 12 + Month::Janurary;
Используя эти методы, вы можете значительно уменьшить размер своего кода, упрощая его чтение и обслуживание.Кроме того - вы улучшаете производительность, избавляясь от всех ветвей.
Отказ от ответственности - Я не скомпилировал этот код, написанный из памяти.