El tipo enum no es mas que una variacion especial del tipo entero, cuando defines un enum, estas definiendo constantes enteras automaticas, que por defecto comienzan en el numero 0.
En el ejemplo que mencionas, Simple = 0, Doble = 1, Suite = 2.
Tendrias varias opciones para guardar el valor en la variable habit de tu estructura.
1. Usar una variable adicional de tipo char[], y luego usar condiciones if para guardar el valor correcto:
char tipo[20];
cout << "Introduce tipo de habitacion ";
cin.getline(tipo, 20-1);
if (strcmp(tipo, "simple") == 0)
{
c1.habit = Simple;
}
else
if (strcmp(tipo, "doble") == 0)
{
c1.habit = Doble;
}
else
{
if (strcmp(tipo, "suite") == 0)
{
c1.habit = Suite;
}
}
2. Usar una variable adicional de tipo int y luego usar un switch para guardar el valor correcto:
int tipo;
cout << "Introduce tipo de habitacion (0 = simple, 1 = doble, 2 = suite :";
cin >> tipo;
switch (tipo)
{
case Simple :
c1.habit = Simple;
break;
case Doble :
c1.habit = Doble;
break;
case Suite :
c1.habit = Suite;
break;
}
3. Usar una variable adicional de tipo entero y luego usar un typecast para guardar el valor directamente en tu variable.
int tipo;
cout << "Introduce tipo de habitacion (0 = simple, 1 = doble, 2 = suite :";
cin >> tipo;
// Typecast de la variable.
c1.habit = (TTipo) tipo2;
Para verlos seria algo parecido, puedes usar un switch, y dependiendo el valor de c1.habit, en pantalla muestas el tipo de habitacion escribiendolo manualmente, o sea, cuando c1.habit sea igual a Simple, imprimes con cout la Frase "Habitracion Simple" y asi por el estilo.
Tu decides cual es el metodo que mas te gusta o el que mas te convenga.
Saludos