• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ptrci

Problema com o switch

6 mensagens neste tópico

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');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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#.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora