Problem when receiving char values

Asked

Viewed 94 times

-1

Why the first time I pass an error char value (as if it were empty)? Then the second try works normal?

After I received the initial post or shift of error and yet I gave one Writeline was with the correct value, being necessary to type new.

/**
 * 5) Uma empresa possui dez funcionários com as seguintes características: 
 * código, número de horas trabalhadas no mês, 
 * turno de trabalho(M - Matutino, V - Vespertino ou N - Noturno), 
 * categoria (O - Operário ou G - Gerente), 
 * valor da hora trabalhada. 
 * Sabendo-se que esta empresa deseja informatizar a folha de pagamento, faça um programa que:
 * a) Leia as informações do funcionário, não permitindo que sejam informados turnos ou categorias
 * inexistentes. Trabalhar sempre com a digitação de letras maiúsculas.
 * 
 * Calcule o valor da hora trabalhada, conforme tabela a seguir: -- slide ---
 * 
 * Adote o valor de R$150,00 para o salário mínimo.
 * c) Calcule o salário inicial dos funcionários com base no valor da hora trabalhada e 
 * o número de horas trabalhadas.
 * d) Calcule o valor do auxílio alimentação recebido por funcionário, 
 * de acordo com o seu salário inicial, conforme tabela a seguir: --- slide -- **/


int codigo, controle = 1;
double h_trabalhadas, valor_h_trabalho;
char turno, categoria;
string aux;

while(controle <= 10)
{
    Console.WriteLine("-----------------------------------------");
    Console.WriteLine("Código do funcionário: ");
    aux = Console.ReadLine();
    codigo = Convert.ToInt16(aux);

    Console.WriteLine("Número de horas trabalhadas por mês: ");
    aux = Console.ReadLine();
    h_trabalhadas = Convert.ToDouble(aux);

    Console.WriteLine("Turno (M/V/N): ");
    aux = Console.ReadLine();
    turno = Convert.ToChar(aux);


    //Validar turno
    while((turno != 'M')||(turno != 'V')||(turno != 'N'))
    {
        Console.WriteLine("Turno inválido, tente novamente");
        Console.WriteLine("Turno (M/V/N): ");
        aux = Console.ReadLine();
        turno = Convert.ToChar(aux);

        if ((turno == 'M') || (turno == 'V') || (turno == 'N'))
            break;
    }

    Console.WriteLine("Categoria (O/P): ");
    aux = Console.ReadLine();
    categoria = Convert.ToChar(aux);

    //Validar categoria
    while ((categoria != 'O') || (categoria != 'P'))
    {
        Console.WriteLine("Categoria inválida, tente novamente");
        Console.WriteLine("Categoria (O/P): ");
        aux = Console.ReadLine();
        categoria = Convert.ToChar(aux);

        if ((categoria == 'O') || (categoria == 'P'))
            break;
    }

    Console.WriteLine("Valor da hora de trabalho: ");
    aux = Console.ReadLine();
    valor_h_trabalho = Convert.ToDouble(aux);

Code test: https://repl.it/K859

This way, if I typed’M' why requested again..

inserir a descrição da imagem aqui

  • What would be the error that is occurring ?

  • No error appears only that when I enter the value: M for the turn it asks me to type again, as if I did not recognize the character then enters the while(), I put the site to test there

2 answers

2


The while validates this entry should be using && and not ||.

That is to say:

If the entered value is different from M and also different of V and also different from N.

while((turno != 'M') && (turno != 'V') && (turno != 'N'))

See working on . NET Fiddle.

  • Got it, thanks again buddy!

1

The logic of your WHILE is the problem.

While instruction performs an instruction or a block of instructions up to a specified expression is evaluated as false.

Reference: https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/while

For example, if I type an M, your while will look like:

while(false||true||true)

which is the same as:

while(true)

The same will happen to any of the other two values if they are chosen. Now note that regardless of the entered value, there will always be two expressions of your WHILE equal to true, this is sufficient for your WHILE to always run, regardless of the entered value being correct.

  • 1

    Thanks for the reply bro, just missed even have informed as I tidied up this

Browser other questions tagged

You are not signed in. Login or sign up in order to post.