How to use if else in the code below

0

When I type the id of the artist and the other data, then I will type the id of the repairer, I need to type the id of the repairer, if it is the same as the artist, he should not accept it and ask for another id, one part, but it does not ask for another id and goes straight to the name.

Console.WriteLine("Digite o ID do artista:");
int idArtista = int.Parse(Console.ReadLine());
Console.WriteLine("Digite o nome do artista:");
string nomeArtista = Console.ReadLine();
Console.WriteLine("Digite o sobrenome do artista:");
string sobrenomeArtista = Console.ReadLine();

Console.WriteLine("Digite o ID do reparador:");
int idReparador = int.Parse(Console.ReadLine());
bool condição = true;
if (idArtista == idReparador)
{
    Console.WriteLine("Id existente.");
}
if (!condição)
{
    Console.WriteLine("Digite o ID do reparador:");
}

Console.WriteLine("Digite o nome do reparador:");
string nomeReparador = Console.ReadLine();
Console.WriteLine("Digite o sobrenome do reparador:");
string sobrenomeReparador = Console.ReadLine();
    
asked by anonymous 05.09.2017 / 20:37

2 answers

3

Your logic, in the block below, does not make any sense.

bool condição = true;  // <- condição recebe o valor 'true'
if (idArtista == idReparador) // <- Aqui é comparado se os ids são iguais, certinho
{
    Console.WriteLine("Id existente."); // <- mostrar a mensagem. Certo!
}
if (!condição) // <- Chechar se condição é 'false', mas como poderia ser????
{
    Console.WriteLine("Digite o ID do reparador:");// <- Pede pelo ID, mas não lê a entrada
}

The code should look something like this:

public static void Main()
{
    Console.WriteLine("Digite o ID do artista:");
    int idArtista = int.Parse(Console.ReadLine());

    Console.WriteLine("Digite o nome do artista:");
    string nomeArtista = Console.ReadLine();

    Console.WriteLine("Digite o sobrenome do artista:");
    string sobrenomeArtista = Console.ReadLine();

    int idReparador;

    do
    {
        Console.WriteLine("Digite o ID do reparador:");
        idReparador = int.Parse(Console.ReadLine());
        if(idArtista == idReparador)                
            Console.WriteLine("Id existente.");            
    }
    while(idArtista == idReparador); 
    // (^) Repetir o passo acima sempre que os ids forem iguais

    Console.WriteLine("Digite o nome do reparador:");
    string nomeReparador = Console.ReadLine();
    Console.WriteLine("Digite o sobrenome do reparador:");
    string sobrenomeReparador = Console.ReadLine();
}

See working in .NET Fiddle.

    
05.09.2017 / 20:41
3

It is not well if that has to use, it is while since the person can type wrong several times, then it has to repeat until it agrees with the desired.

Besides this there is another problem, if a person types something that is not a number and can not be converted it will give an error, this needs to be dealt with as well. I did it with TryParse() which is the most correct.

I took the time to modernize the code and make it more concise.

using static System.Console;

public class Program {
    public static void Main() {
        var idArtista = 0;
        while (true) {
            WriteLine("Digite o ID do artista:");
            if (int.TryParse(ReadLine(), out idArtista)) break;
        }
        WriteLine("Digite o nome do artista:");
        var nomeArtista = ReadLine();
        WriteLine("Digite o sobrenome do artista:");
        var  sobrenomeArtista = ReadLine();
        var  idReparador = 0;
        while (true) {
            WriteLine("Digite o ID do reparador:");
            if (int.TryParse(ReadLine(), out idReparador) && idArtista != idReparador) break;
        }
    }
}

See running on .NET Fiddle . And at Coding Ground . Also put it in GitHub for future reference .

If you want to keep the error message change to:

        while (true) {
            WriteLine("Digite o ID do reparador:");
            if (!int.TryParse(ReadLine(), out idReparador) continue;
            if (idArtista == idReparador) {
                WriteLine("Id existente.");
            } else {
                break;
            }
        }
    
05.09.2017 / 20:45