Jump to content

Problema com o switch


ptrci
 Share

Recommended Posts

Estou a experimentar o  switch  no C#. Mas tenho o seguinte problema quando eu clico na tecla enter sem escolher nenhuma opção, em vez de dar o aviso "Default case"  ele bloqueia.


     Console.WriteLine("Escolha a sua opção");
        a = char.Parse(Console.ReadLine());
        do
        {
            switch (a)
            {
                case '1':
                    Console.WriteLine("Case 1");
                    break;
                case '2':
                    Console.WriteLine("Case 2");
                    break;
                default:
                    Console.WriteLine("Default case");
                    break;
            }
        }
        while (a != '0');
Link to comment
Share on other sites

Bloqueia à espera que introduzas alguma coisa, ou não?

Assim à primeira vista, precisas mesmo do char.Parse ?

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

Já fizeste debug? Viste a excepção que dá? Foste ver ao MSDN a que é que correspondia? Vê aqui

O char.Parse recebe uma string com exactamente um caracter. Quando pressionas enter sem ter seleccionado uma letra, estás a passar uma string com zero caracteres. Se escreveres dois caracteres e carregares no enter dá exactamente o mesmo problema. Tens que verificar se o que leste da consola tem exactamente um caracter, e só se tiver é que entras no switch.

Desaparecido.

Link to comment
Share on other sites

O problema e que não consigo arranjar solução para dar a volta a isso.  E também não sou mito experiente em C#. Ainda estou a  aprender a mexer no C#.

Link to comment
Share on other sites

Tens outro problema que não vi à primeira (como tens o código não vai ficar no loop até inserires 0, porque estás a ler a consola fora do loop), mas para o problema que disseste eu já te dei a solução.

Tens que verificar se o que leste da consola tem exactamente um caracter, e só se tiver é que entras no switch.

Mas se queres um bocadinho de código:

	string s;
do {
	s=Console.ReadLine();
	if (s.Length != 1) Console.WriteLine("Opção inválida!");
	else {
		a = char.Parse();
		switch (a) {
			case '1':
				Console.WriteLine("Case 1");
				break;
			case '2':
				Console.WriteLine("Case 2");
				break;
			default:
				Console.WriteLine("Default case");
				break;
		}
	}
}
while (a != '0');

Não testei porque não tenho o Visual Studio instalado (acabei de reinstalar o Windows), mas se algo não funcionar deve ser fácil de resolver... espero eu :😉

Desaparecido.

Link to comment
Share on other sites

Obrigado pela ajuda, sabia que tinha de converter string para char mas não estava a conseguir.

Consegui converter. Mas depois o loop não funcionava, não reconhecia a variavel a ( char), resolvi com um número inteiro.

Mas esta a fazer confusão porque dizia que a variável a não estava iniciada.

Esta aqui o código

    static void Main()
    {

        char a;
        string s;
        int p = 1;

        do
        {
            Console.WriteLine(" 1 - Inserir Livro");
            Console.WriteLine(" 2 - Listar Todos do Livros");
            Console.WriteLine(" 3 - Pesquisa Livro");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine(" 0 - Sair da aplicação");
            Console.WriteLine("");
            Console.WriteLine("Escolha a sua opção: \a");

            s = Console.ReadLine();
            if (s.Length != 1) Console.WriteLine("Opção inválida!");

            else
            {
                a = Convert.ToChar(s);

                switch (a)
                {
                    case '1':
                        Console.WriteLine("Case 1");
                        Console.WriteLine("Insira o número de livros que quer introduzir");
                        int val = int.Parse(Console.ReadLine());
                        for (int i = 0; i < val; i++)
                        {
                            Console.WriteLine("Insira o nome");
                            string nome = Console.ReadLine();
                            Console.WriteLine("Insira o titulo");
                            string titulo = Console.ReadLine();
                            Console.WriteLine("Insira o ano");
                            string ano = (Console.ReadLine());
                            livro livro = new livro(nome, titulo, ano);
                            Livros.Add(livro);
                            gravar(val, "livros.bin");
                        }
                        break;

                    case '2':
                        Console.WriteLine("Lista de Livros");
                        int[] tabelalivros = null;
                        ler("livros.bin", ref tabelalivros);
                        for (int i = 0; i < tabelalivros.Length; i++)
                        {
                            Console.WriteLine("");
                            Console.WriteLine(tabelalivros[i]);
                            Console.WriteLine(tabelalivros);
                            livro livro = new livro();
                            Livros.Add(livro);
                        }
                        Livros.List();
                        break;


                    case '3':
                        Console.WriteLine("Pesquisar nome");
                        Console.WriteLine("Insira o nome a a pesquisar");
                        string pnome = Console.ReadLine();
                        Livros.pesquisa(pnome);

                        break;

                    case '4':
                        Console.WriteLine("Remover Titulo");
                        break;

                    case '0':
                        Console.WriteLine("Sair da Aplicação");
                        p = 0;
                        break;


                    default:
                        Console.WriteLine("Default case");
                        break;

                }
            } 
        } while ( p != 0);
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.