Reading user information

1

I started studying C #, and my first program (except for hello world hahahaha) is an area calculator. In the code below, after I type the option (choosing which picture I want) the console simply closes.

            Console.WriteLine("Bem vindo a calculadora de áreas!!!");
            Console.WriteLine("A seguir escolha qual figura deseja, digitando o número correspondente a figura correspondente.");
            Console.WriteLine("1 ==> Quadrado");
            Console.WriteLine("2 ==> Triângulo");
            Console.WriteLine("3 ==> Circunferência");
            int opcao = Console.Read();

            switch (opcao)
            {
                case  1:
                    int lado;
                    Console.WriteLine("Digite o valor do lado do quadrado: ");
                    lado = Console.Read();
                    lado = lado * lado;
                    Console.WriteLine("O valor da área do quadrado e: ", lado);
                    break;
                case  2:
                    int base_t, altura, resultado;
                    Console.WriteLine("Digite o valor da base do triângulo: ");
                    base_t = Console.Read();
                    Console.WriteLine("Digite o valor da altura do triângulo: ");
                    altura = Console.Read();
                    resultado = base_t * altura / 2;
                    Console.WriteLine("O valor da área do triângulo é: ", resultado);
                    break;
                case  3:
                    int raio;
                    double area;
                    Console.WriteLine("Digite o valor do raio da circunferência: ");
                    raio = Console.Read();
                    area = Math.PI * (raio * raio);
                    Console.WriteLine("O valor da área do circunferência e: ", area);
                    break;
            }

        }
    }
}
    
asked by anonymous 11.07.2016 / 23:11

1 answer

2

The problem is that you are picking up a character. You need to get a text and convert it to number to work. I did this to demonstrate, I gave a code modernized and solved a problem that was not printing the result. Obviously from this can best, can make a loop to ask again when it fails, can generalize the conversion code and validation.

using System;
using static System.Math;
using static System.Console;

public class Program {
    public static void Main() {
        WriteLine("Bem vindo a calculadora de áreas!!!");
        WriteLine("A seguir escolha qual figura deseja, digitando o número correspondente a figura correspondente.");
        WriteLine("1 ==> Quadrado");
        WriteLine("2 ==> Triângulo");
        WriteLine("3 ==> Circunferência");
        string escolha = ReadLine();
        int opcao;
        if (!int.TryParse(escolha, out opcao)) {
            Write("Opção inválida");
            return;
        }

        switch (opcao) {
            case  1:
                int lado;
                WriteLine("Digite o valor do lado do quadrado: ");
                string texto = ReadLine();
                if (!int.TryParse(escolha, out lado)) {
                    Write("Número inválido");
                    return;
                }
                lado = lado * lado;
                WriteLine($"O valor da área do quadrado e: {lado}");
                break;
            case  2:
                int base_t, altura, resultado;
                WriteLine("Digite o valor da base do triângulo: ");
                texto = ReadLine();
                if (!int.TryParse(escolha, out base_t)) {
                    Console.Write("Número inválido");
                    return;
                }
                WriteLine("Digite o valor da altura do triângulo: ");
                texto = ReadLine();
                if (!int.TryParse(escolha, out altura)) {
                    Write("Número inválido");
                    return;
                }
                resultado = base_t * altura / 2;
                WriteLine($"O valor da área do triângulo é: {resultado}");
                break;
            case  3:
                int raio;
                double area;
                WriteLine("Digite o valor do raio da circunferência: ");
                texto = ReadLine();
                if (!int.TryParse(escolha, out raio)) {
                    Write("Número inválido");
                    return;
                }
                area = PI * (raio * raio);
                WriteLine($"O valor da área do circunferência e: {area}");
                break;
        }
    }
}

See running at dotNeFiddle and at CodingGround .

The ReadLine() is the method to read more complex data (more than one character). Except that it always returns a text. So it has to do the conversion. As you are not sure that a number was entered the conversion may fail. So the correct method to convert is TryParse() that tries to convert, if it does not work, it gives a return indicating this, if it works, put the converted value in the variable that is passing. If you need more details about this, ask a specific question on the subject not to mix.

I know it can be a bit heavy for someone who is starting, but the example can not be done correctly and simply at the same time. What good is learning to do wrong? I taught you right. Still not quite sure not to complicate too much. For exercise, that's fine.

See Differences between Parse vs TryParse .

    
11.07.2016 / 23:25