ok, first off... you call main() recursively. Don't. There are some very odd ball places where it is useful (usually has to do with having very small memory footprints). but in general it is a bad practice. Use loops, that is what they are made for.
Next. Enumerations are neat. People do often use switch-case structures to convert user input into an enumerated value, but you don't have to.
You are asking the user to input a number -- enumerations are numbers... so you can just jump from one to the other if you like.
Another note (this one just stylistic). People usually try to give types a capital first letter to distinguish them from variables (which generally start in lower case). Now the compiler does not care, but I bet you will find that it helps to make your code more readable if you name structs, enums, unions, classes, typedefs etc with an initial capital letter. Also name macro's in all upper case (if you ever use them).
So here might be one version of your program:
cpp
#include <iostream>
#include <limits>
#include <string>
using namespace std;
typedef enum {
EASY = 1,
NORMAL,
HARD
} Difficulty;
string settings[] = { "", "Easy", "Normal", "Hard" };
int main() {
Difficulty myDiff;
int userInput;
cout << "Difficulty Levels\n\n"
<< "1 - Easy\n"
<< "2 - Normal\n"
<< "3 - Hard\n\n"
<< "Choice (1-3): ";
cin >> userInput;
//we ant to make sure the user input a number, and it was in the correct range.
while (!cin || (userInput < 1 || userInput > 3)) {
cout << "\nBad input: Choice (1, 2, or 3):";
cin.clear(); //clear the error if user entered something like "abc"
cin.ignore(std::numeric_limits<streamsize>::max(),'\n'); //clear any newline characters that might be hanging around....
cin >> userInput; //get the users' next try...
}
myDiff = (Difficulty)userInput; //we can cast from the int into the enum
cout << "You have chosen: " << settings[myDiff] << endl;
return 0;
}
for more on using enumerations see the bibliography at the end of
my tutorial