Return 0

Maio 7, 2008

Instruções If e Else em C, C++ e Java

Arquivado em: C/C++, Java — Tags:, , , , — computeiro @ 7:45 pm

Bastante requisitada por programadores iniciantes e/ou programadores provenientes de outra linguagem, a maneira de se construir um bloco de instruções if/else é bastante trivial e exatamente igual em C, C++ e Java. Aqui vai um exemplo:

Em C:

# include <stdio.h>

int main(int argc, char** argv)
{
    int x = 0;
    int y = 1;

    if(x > y)
        printf("%d eh maior que %d\n", x, y);
    else
        printf("%d nao eh maior que %d\n", x, y);

    x = y--;

    if(x > y)
        printf("%d eh maior que %d\n", x, y);
    else
        printf("%d nao eh maior que %d\n", x, y);

    return 0;
}

Em C++:

# include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    int x = 0;
    int y = 1;

    if(x > y)
        cout << x << " eh maior que " << y << endl;
    else
        cout << x << " nao eh maior que " << y << endl;

    x = y--;

    if(x > y)
        cout << x << " eh maior que " << y << endl;
    else
        cout << x << " nao eh maior que " << y << endl;

    return 0;
}

Em Java:

public class IfElse
{
    public static void main(String args[])
    {
        int x = 0;
        int y = 1;

        if(x > y)
            System.out.println(x + " eh maior que " + y);
        else
            System.out.println(x + " nao eh maior que " + y);

        x = y--;

        if(x > y)
            System.out.println(x + " eh maior que " + y);
        else
            System.out.println(x + " nao eh maior que " + y);
    }
}

O velho problema das chaves nos if/else aninhados:

Sabemos que ao usar apenas uma instrução dentro de um if ou de um else, as chaves são opcionais. Mais de uma instrução, no entanto, torna obrigatório o uso das chaves. Vejamos um problema comum com o uso das chaves em if/else aninhados:

# include <stdio.h>

int main(int argc, char** argv)
{
    int x = 5;

    if(x == 5)
        x = 4;
        if(x == 3)
            x = 2;
    else
        x = 0;

    //imprima x

    if(x == 5)
        x = 4;
        if(x == 3)
            x = 2;
    else
        x = 1;

    //imprima x

    return 0;
}

O que ocorrerá com o valor de x neste código? Teste-o e tire suas conclusões. A dica que eu posso dar é que pode ser resolvido fazendo isto:

# include <stdio.h>

int main(int argc, char** argv)
{
    int x = 5;

    if(x == 5)
    {
        x = 4;
        if(x == 3)
            x = 2;
    }else
        x = 0;

    //imprima x

    if(x == 5)
    {
        x = 4;
        if(x == 3)
            x = 2;
    }else
        x = 1;

    //imprima x

    return 0;
}

Teste os dois códigos e perceba que uma instrução else sempre pertence a o último if, no caso deste if/else conter apenas uma instrução. Uma dica: para evitar problemas, sempre use chaves em if/else, não importa se ele tiverem mais de uma instrução ou apenas uma.

return 0

Sem comentários ainda »

Nenhum comentário ainda.

Feed RSS dos comentários deste post URI do TrackBack

Deixe um comentário

Blog no WordPress.com.