• Sábado 19 de Octubre de 2019, 06:21

Autor Tema:  menu - Switch case - C#  (Leído 8756 veces)

eze2k

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
menu - Switch case - C#
« en: Lunes 10 de Marzo de 2014, 16:18 »
0
Hola, soy nueva programando en C#, podrían darme una mano con menu que intento armar y ya me he liado bastante?.
La idea es, tener un menu principal (menu1) en el cual tengo una opción que me lleva a un segundo menu (menu2) y teniendo la posibilidad desde este menu de volver al menu1.

A continuación adjunto el código.

Código: [Seleccionar]
using System;
using System.Diagnostics;
 
namespace TestLog
{
class Program
{
 
static void Main()
{
Menu();
}
 
static void Menu()
{
 
char opcion;
 
do
{
Console.Clear();
Console.WriteLine("\t************************");
Console.WriteLine("\t*  1- OPCION1                *");
Console.WriteLine("\t*  2- OPCION2           *");
Console.WriteLine("\t*  ..- OPCION..        *");
Console.WriteLine("\t*  ..- OPCION..        *");
Console.WriteLine("\t*  N - Configurar Parametr   *");
Console.WriteLine("\t************************");
Console.WriteLine("\t*  [0]- Salir                            *");
Console.WriteLine("\t************************");
Console.Write("Opcion: ");
do {
opcion = Console.ReadKey(true).KeyChar;
} while(opcion <'0' || opcion > 'N'); //N cualquier valor dependiendo del menu
Console.WriteLine(opcion + "\n");
 
switch (opcion)
{
case '1':
Process.Start("cmd.exe", "dir");
break;
 
case '2':
Process.Start("cmd.exe", "dir");
break;
 
case '3':
funcionM();
break;
}
 
 
}while (opcion!='0');
}
static void funcionM()
{
char opcion2;
do
{
Console.Clear();
Console.WriteLine("\t************************");
Console.WriteLine("\t*         Configuracion Param  *");
Console.WriteLine("\t************************");
Console.WriteLine("\t* [1]- Opcion1                       *");
Console.WriteLine("\t* [2]- OPCION2                     *");
Console.WriteLine("\t* [3]- OPCION3                     *");
Console.WriteLine("\t* [..]- OPCION..                     *");
Console.WriteLine("\t* [..]- OPCION..                     *");
Console.WriteLine("\t* [10]- Volver al menu prin    *");
Console.WriteLine("\t* [N]- OPCIONN                     *");
Console.WriteLine("\t************************");
Console.Write("Opcion: ");
 
do {
opcion2 = Console.ReadKey(true).KeyChar;
} while( (opcion2 <'0') || (opcion2 > '10')); //ESTO se que está mal, pero no sé cómo hacer
                                //para que me tome los valores de 2 cifras. El error que me devuelve es:
                                //Demasiados caracteres en literal de caracter - CS012
Console.WriteLine(opcion2 + "\n");
switch(opcion2)
{
case '1': //Aqui me da problemas con el Case, me dice que 1 ya fue usado antes ... :S
                                            // El error que me devuelve es: Demasiados caracteres en literal de caracter - CS012
Process.Start("cmd.exe", "dir");
break;
 
case '2':
Process.Start("cmd.exe", "dir");
break;
 
case '12':
Menu();
break;
}
}while(!='10');
//}
}
/*static void Salir()
{
Console.Clear();
Console.WriteLine("Salir");
}*/
 
}
}

Gracias y salu2
« última modificación: Martes 11 de Marzo de 2014, 18:50 por ProfesorX »

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:menu - Switch case - C#
« Respuesta #1 en: Martes 11 de Marzo de 2014, 20:16 »
0
Hola eze2k, el problema esta en que Readkey solo admite una sola tecla, te recomiendo dos formas de hacerlo en caso de que necesites mas de 10 opciones

1. utiliza letras para las opciones superiores a 10 (A, B, C, etc.)
2. En lugar de usar Console.Readkey utiliza Console.Readln()

Te dejo el codigo corregido con comentarios.

Código: [Seleccionar]
using System;
using System.Diagnostics;

namespace TestLog
{
    class Program
    {

        static void Main()
        {
            Menu();
        }

        static void Menu()
        {

            char opcion;

            do
            {
                Console.Clear();
                Console.WriteLine("\t************************");
                Console.WriteLine("\t*  1- OPCION1                 *");
                Console.WriteLine("\t*  2- OPCION2                 *");
                Console.WriteLine("\t*  3- Configurar Parametr    *");
                Console.WriteLine("\t************************");
                Console.WriteLine("\t*  [0]- Salir                 *");
                Console.WriteLine("\t************************");
                Console.Write("Opcion: ");
                do
                {
                    opcion = Console.ReadKey(true).KeyChar;
                } while (opcion < '0' || opcion > '3'); //N cualquier valor dependiendo del menu
                Console.WriteLine(opcion + "\n");

                switch (opcion)
                {
                    case '1':
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '2':
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '3':
                        funcionM();
                        break;
                }


            } while (opcion != '0');
        }
        static void funcionM()
        {
            char opcion2;
            do
            {
                Console.Clear();
                Console.WriteLine("\t************************");
                Console.WriteLine("\t*         Configuracion Param        *");
                Console.WriteLine("\t************************");
                Console.WriteLine("\t* [1]- Opcion1                       *");
                Console.WriteLine("\t* [2]- OPCION2                       *");
                Console.WriteLine("\t* [3]- OPCION3                       *");
                Console.WriteLine("\t* [0]- Volver al menu prin           *");
                Console.WriteLine("\t************************");
                Console.Write("Opcion: ");

                do
                {
                    /*
                                        Readkey solo admite una sola tecla, te recomiendo dos formas de hacerlo
                                        en caso de que necesites mas de 10 opciones
                                        1. utiliza letras para las opciones superiores a 10 (A, B, C, etc.)
                                        2. En lugar de usar Console.Readkey utiliza Console.Readln(), Ejemplo:

                                        string opcion2;
                                        opcion2 = Console.ReadLine();
                                        switch (opcion2)
                                        {
                                            // Utiliza "" en lugar de ''
                                            case "10": Console.WriteLine("\t* [10]- Volver al menu prin           *");
                                                break;
                                        }
                    */
                    opcion2 = Console.ReadKey(true).KeyChar;
                } while ((opcion2 < '0') || (opcion2 > '3')); //ESTO se que está mal, pero no sé
                // cómo hacer para que me tome los valores de 2 cifras. El error que me devuelve es:
                // Demasiados caracteres en literal de caracter - CS012
                Console.WriteLine(opcion2 + "\n");
                switch (opcion2)
                {
                    case '1': //Aqui me da problemas con el Case, me dice que 1 ya fue usado antes ...
                        //:S El error que me devuelve es: Demasiados caracteres en literal de caracter - CS012
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '2':
                        Process.Start("cmd.exe", "dir");
                        break;

                    case '3':
                        break;
                }
            } while (opcion2 != '0');
            //}
        }
        /*static void Salir()
        {
            Console.Clear();
            Console.WriteLine("Salir");
        }*/

    }
}


Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================