Dúvida em funções e vetores em C

Olá, bom dia!
Estou com dúvidas em como eu poderia montar uma função em C. Essa função é responsável por receber as notas de todos os alunos de uma classe (que eu não sei quantos são), armazenar este valor dentro de um vetor. Os valores válidos são entre 1 e 149. Caso o usuário digite 150, o sistema deveria parar e ir para um menu de opções. O problema é que com o código que eu fiz, ele não para quando eu digito 150.

void vetor_cadastro_de_idade(int idade[]){
    //Declaração de variáveis
    int i;
    //Instruções
    do{
        for(i = 0; i < 500; i++){
            printf("Por gentileza, informe a idade do(a) aluno(a).\n");
            scanf("%d", &idade[i]);
            while (idade[i]<=0 || idade[i]>150){
                printf("Prezado(a) usuario(a), o valor digitado e invalido. Tente novamente\n");
                printf("Por gentileza, informe a idade do(a) aluno(a).\n");
                scanf("%d", &idade[i]);
            }
        }
        }while(idade[i]!=150);
}

O problema é o for.
Ele vai iterar 500 vezes e só depois o código chega na verificação do while (idade[i] != 150);.

Uma solução é não usar o for, afinal vc já tem um while. Simplesmente remova ele e incremente i no final com i++
Aí tbm teria que fazer a verificação de i<500 num if.

Quando eu removo, ele dá erro. O programa compila mas no primeiro valor digitado já dá erro.

void vetor_cadastro_de_idade(int idade[]){
    //Declaração de variáveis
    int i, c;
    //Instruções
    c = 0;
//        for(i = 0; i < 500; i++){
            printf("Por gentileza, informe a idade do(a) aluno(a).\n");
            scanf("%d", &idade[i]);
//            if (idade[i]==150){
//                break;
//            }
            while(idade[i]<=0 || idade[i]>150){
                printf("Prezado(a) usuario(a), o valor digitado e invalido. Tente novamente!\n");
                printf("Por gentileza, informe a idade do(a) aluno(a).\n");
                scanf("%d", &idade[i]);
                if (idade[i]==150)
                    break;
            }
                i++;
                c = c + 1;
//        }
}Texto pré-formatado

Você tirou o do while também? Era só o for mesmo.

Tirei só do for

void vetor_cadastro_de_idade(int idade[]){
    //Declaração de variáveis
    int i;
    //Instruções
    do{
        //for(i = 0; i < 500; i++){
            if (i >= 500) {
                break;
            }
            printf("Por gentileza, informe a idade do(a) aluno(a).\n");
            scanf("%d", &idade[i]);
            while (idade[i]<=0 || idade[i]>150){
                printf("Prezado(a) usuario(a), o valor digitado e invalido. Tente novamente\n");
                printf("Por gentileza, informe a idade do(a) aluno(a).\n");
                scanf("%d", &idade[i]);
            }
            i++;
        //}
        }while(idade[i]!=150);
}

Não seria mais fácil jogar um if depois do scan e se for igual a 150, dar um break?

Funcionaria também, sem o for original.

1 curtida

Funcionou direitinho!
Eu queria saber se poderia dar um help em como eu faço para achar o maior e o menor número usando vetores…
Eu calculei a média (criei uma função para calcular a média) e gostaria de saber como eu faço para os números dentro de um vetor para números maiores que a média e outro vetor para números menores que a média.

Função:

float calculo_da_media(int i, int vetor_de_idade[]){
    //declarações
    int soma, j;
    float media;
    //Instruções
    soma = 0;
    j = 0;
    for (j=0; j<i; j++){
        soma = soma + vetor_de_idade[j];
    }
    media = soma / i;
    return(media);
}

Tem que ser no mesmo método? Se sim:
Abaixo dessa linha que você salvou a média é só fazer um for novamente no array e ir checando: se for menor que a média, guarda num array, se for maior, guarda em outro.

Como eu faria se fosse para utilizar uma outra função ?

Iria guardar a média numa variável (a que vc retornou no método calculo_da_media) e passaria ela para outro método:

void separar_por_media(float media, int[] numeros, int[] menores, int[] maiores) {
    //iterar por numeros e ir adicionando a menores ou maiores
}