Program with Warning and does not accomplish what was requested

0

Good evening! When I was studying for the test I will do, I faced this question. However, when the program was done, it had a warning and did not perform what I did. I would like you to see my code in order to better understand my error. Thanks in advance.

  

Make a program that reads the degree of instruction (whole type) and age   of a group of people and display the age of the oldest (consider that   there is no tie) in each degree of instruction. End of reading: degree of   instruction = 0. The following instruction codes are used: 1 -   Illiterate, 2 - First degree, 3 - High school, 4 - Higher, 5 -   Masters, 6 - PhD, 7 - Others. Do the following functions: a)   initializes (): receives as a parameter a vector of integers and   initialize it properly.   b) displays (): receives as parameter a   vector of already completed integers and displays the age of the oldest   (consider that there is no tie) in every degree of instruction.

#include <stdio.h>
#define TOT 7


void inicializa (int *vet){
    int i;
    for (i = 0; i < TOT; i++){
    }


}

void exibe (int *vet){
    int i;
    int velho;
    velho = 0;
    for (i = 0; i < TOT; i++){
        if (velho < vet[i])
            velho = vet[i];     
    }
    printf ("%d", velho);


}


int main (){
    int *vet[TOT], cont, idade, pessoas, instrucao;
    printf ("Digite a quantidade de pessoas\n");
    scanf ("%d", &pessoas);
    inicializa (vet);
    for (cont = 0; cont < pessoas;cont++){
        printf ("Digite o grau de instrucao\n");
        scanf ("%d", &instrucao);

        switch (instrucao)
        {
            case 1:
                printf ("Analfabeto");
                printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 2:
                printf ("Primeiro Grau");
                printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 3:
                printf ("Segundo grau");
                printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 4:
                printf ("Superior");
                            printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 5:
                printf ("Mestrado");
                            printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 6:
                printf ("Doutorado");       
                    printf ("Digite sua idade");
                scanf ("%d", &idade);
                break;
            case 7:
                printf ("Outros");
                break;
                default:
                    printf ("opcao invalida");
                }
                exibe (vet);


        }
         return 0;

    }
    
asked by anonymous 31.05.2018 / 23:43

2 answers

1

inicializa would have to initialize; It's not what you're doing there!

void inicializa(int* v)
{
    int i;

    for (i = 0; i < 7; ++i)
    {
        v[i] = -1;
    }
}

Then, exibe would have to show the contents of the vector,

void exibe(int* v)
{
    int i;

    printf("Maiores idades por grau de instrucao\n");

    for (i = 0; i < 7; ++i)
    {
        if (v[i] == -1)
        {
            printf("%s: Nenhum informado\n", descricao(i + 1));
        }
        else
        {
            printf("%s: %d\n", descricao(i + 1), v[i]);
        }
    }
}

I created a support function called descricao ,

char* descricao(int grauInstrucao)
{
    switch (grauInstrucao)
    {
        case 1:
            return "Analfabeto(a)";
        case 2:
            return "Primeiro grau";
        case 3:
            return "Segundo grau";
        case 4:
            return "Ensino superior";
        case 5:
            return "Mestrado(a)";
        case 6:
            return "Doutorado(a)";
        case 7:
            return "Outros";
    }
}

main could look like this:

int main(int argc, char* argv[])
{
    int idadePorGrauInstrucao[7];
    int qtdPessoas;
    int grauInstrucao = -1;
    int i;
    int idade;

    inicializa(idadePorGrauInstrucao);

    do
    {
        fflush(stdin);
        printf("Digite a quantidade de pessoas: ");
        scanf("%d", &qtdPessoas);

        if (qtdPessoas > 0)
        {
            for (i = 0; i < qtdPessoas; ++i)
            {
                fflush(stdin);
                printf("Digite o grau de instrucao da pessoa %d (0 para sair): ", i + 1);
                scanf("%d", &grauInstrucao);
                if (!grauInstrucao)
                {
                    break;
                }

                fflush(stdin);
                printf("Digite a idade: ");
                scanf("%d", &idade);
                if (idade >= 0)
                {
                    if (idadePorGrauInstrucao[grauInstrucao - 1] < idade)
                    {
                        idadePorGrauInstrucao[grauInstrucao - 1] = idade;
                    }
                }
            }

            exibe(idadePorGrauInstrucao);
        }
    } while (grauInstrucao);

    return 0;
}
    
01.06.2018 / 00:02
0

1 - You want to pass a vector to a function by reference then use this:

int *vet, cont, idade, pessoas, instrucao;
printf ("Digite a quantidade de pessoas\n");
scanf ("%d", &pessoas);
inicializa (vet);

or else ...

int vet[TOT], cont, idade, pessoas, instrucao;

printf ("Digite a quantidade de pessoas\n");
scanf ("%d", &pessoas);
inicializa (&vet[0]);

Instead of this:

int *vet[TOT];

2º - Note that you are not initializing your data in the function.

void inicializa (int *vet)
    
01.06.2018 / 00:00