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.
voidvetor_cadastro_de_idade(intidade[]){//Declaraçãodevariáveisinti;//Instruçõesdo{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.
D
Diego_Rasmussen
Quando eu removo, ele dá erro. O programa compila mas no primeiro valor digitado já dá erro.
voidvetor_cadastro_de_idade(intidade[]){//Declaraçãodevariáveisinti,c;//Instruçõesc=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;//}}Textopré-formatado
R
RoinujNosde
Você tirou o do while também? Era só o for mesmo.
D
Diego_Rasmussen
Tirei só do for
R
RoinujNosde
voidvetor_cadastro_de_idade(intidade[]){//Declaraçãodevariáveisinti;//Instruçõesdo{//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);}
F
Fefo80
Não seria mais fácil jogar um if depois do scan e se for igual a 150, dar um break?
R
RoinujNosde1 like
Funcionaria também, sem o for original.
D
Diego_Rasmussen
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.
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.
D
Diego_Rasmussen
Como eu faria se fosse para utilizar uma outra função ?
R
Solucao aceita
RoinujNosde
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:
voidseparar_por_media(floatmedia,int[]numeros,int[]menores,int[]maiores){//iterar por numeros e ir adicionando a menores ou maiores}