Para sacar en pantalla el puntero simplemente usa
cout << *nombreDelPuntero;
al definir con static la variable, esta se guarda en memoria y no se destruye al acabar la función. Por lo que puedes utilizarla exactamente igual que si fuese una variable global.
Si no la declaras como static el contenido de la variable será sobrescrito en memoria por cualquier otra cosa que necesite almacenarse en memoria. Entonces cuando quisieses acceder al contenido de la variable, podrías encontrarte que en esa dirección de memoria hay otra cosa distinta. Por eso use static, para decirle que no quiero que la zona de memoria donde está alojada, no se sobreescriba y siempre me guarde el valor de la variable ahí, hasta que el programa finalice y libere la memoria.
Un puntero es lo mismo que una variable, pero le pones el * simplemente para que quien lea el código sepa que es un puntero.
Para que se haga algo, cuando el usuario introduzca un dato que tu no esperas puedes usar el switch case. Pones todos los valores que esperas que la variable argumento del switch pueda contener, y para el resto usas un solo default.
Por ejemplo:
switch (variableConUnNumeroEntero)
{
case 1: //esto se ejecuta si la variable variableConUnNumeroEntero
//vale 1. Es exactamente lo mismo que poner:
// if (variableConUnNumeroEntero == 1)
//{lo que pasa si la variable vale1;}
break;
case 2: // lo mismo, pero si la variable es igual a 2.
//aquí pones lo que quieras que pase si la variable es == a 2.
break;
default: //esto por lo general se aplicará siempre. Pero como hay un
//break; en los otros casos, no se aplicará si alguno de ellos se
//cumple, ya que al ejecutarse un break; el switch finaliza y deja de
//comprobar si los otros case se cumplen.
cout<< "Si lees esto en la salida del programa, quiere decir que la variable no valía ni 1 ni 2";
break;
Si quieres que cuando el usuario ponga un valor erróneo se vuelva a ejecutar en bucle infinitamente hasta que el usuario ponga un valor válido, mete todo el switch dentro de un while y le cambias la condición desde dentro de un case o el default.
Por ejemplo:
int condicionParaDetenerElBucle = 0;
int variableConUnNumeroEntero;
while (condicionParaDetenerElBucle == 0)
{
cout << "Introduce el número 1 para finalizar el programa"
<<endl;
cin >> variableConUnNumeroEntero;
switch (variableConUnNumeroEntero)
{
case 1:
// Lo que quieras que pase;
condicionParaDetenerElBucle =1;
Break;
Default:
cout <<"Tu opción no es válida, intentalo de nuevo".
<<endl;
break;
}
}