1
resposta

[Dúvida] Usar uma variável fora do laço

Estou fazendo esse código que percorre um vetor de cinco variáveis, se o número é par ou impar e se ele é negativo, quero no final printar quantos valores foram encontrados de cada um desses, mas como eu poderia fazer para conseguir usar as variáveis de contador que eu estou usando fora do If e else if? segue o código

#include <stdio.h>

int main() {

    int n1,n2,n3,n4,n5;

    scanf("%d %d %d %d %d", &n1,&n2,&n3,&n4,&n5);

    int numeros[5] = {n1,n2,n3,n4,n5};
    
    int pares, impares, negativos;
    

    for (int i = 0; i <= 5 ; i++)
    {
        if ((numeros[i] % 2) == 0 && numeros[i] < 0)
        {
           pares++;
           negativos++;
        }
        else if ((numeros[i] % 2) !=0 && numeros[i] < 0) 
        {
            impares++;
            negativos++;
        }
        else if ((numeros[i] % 2) == 0 )
        {
            pares++;
        }
        else if ((numeros[i] % 2) != 0)
        {
            impares++;
        }
        
        
    }
    
}
1 resposta

Oi, Luis! Tudo bem?

Para usarmos as variáveis de contagem fora do laço, uma boa prática é inicializá-las antes de entrar no laço. Nesse contexto, podemos notar que declaramos as variáveis pares, impares e negativos, mas não as inicializamos, o que pode causar um comportamento indeterminado, pois essas variáveis podem conter qualquer valor que estivesse na memória no momento em que foram criadas.

Dessa forma, podemos então inicializar nossas variáveis de contagem com 0 antes de entrar no laço, de acordo com o exemplo abaixo:

#include <stdio.h>

int main() {

    int n1,n2,n3,n4,n5;

    scanf("%d %d %d %d %d", &n1,&n2,&n3,&n4,&n5);

    int numeros[5] = {n1,n2,n3,n4,n5};
    
    int pares = 0, impares = 0, negativos = 0;
    

    for (int i = 0; i < 5 ; i++)
    {
        if ((numeros[i] % 2) == 0 && numeros[i] < 0)
        {
           pares++;
           negativos++;
        }
        else if ((numeros[i] % 2) !=0 && numeros[i] < 0) 
        {
            impares++;
            negativos++;
        }
        else if ((numeros[i] % 2) == 0 )
        {
            pares++;
        }
        else if ((numeros[i] % 2) != 0)
        {
            impares++;
        }     
    }

    printf("Pares: %d\n", pares);
    printf("Impares: %d\n", impares);
    printf("Negativos: %d\n", negativos);
    
    return 0;
}

Somado a isso, deixo também como sugestão alterar a condição do laço for de i <= 5 para i < 5, pois os índices de array em C começam em 0, então um array de 5 elementos terá índices de 0 a 4. Dessa maneira, se tentarmos acessar numeros[5], estaremos acessando uma memória fora do array, o que pode causar um comportamento indeterminado.

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓