Arthur,
I corrected my mistake and made some suggestions for improvement.
I commented on the code improvements to get a better reference on what I’m talking about.
#include <stdio.h>
#include <stdlib.h>
// É uma boa prática de programação definir os números que são usados em vários lugares, com um define, vocÊ pode alterar a quantia sem risco de esquecer algum lugar
#define NUM_ALUNOS 10
struct dados{
int numero;
char nome[5]; // Não alterei, mas 5 é pouco para um nome, sugeriria utilizar um vetor maior
};
// É uma boa prática de programação definir os protótipos das funções no início do programa (aconselho pesquisar sobre)
void manipula_um_par (int *a);
void manipula_pares (struct dados *x, int w);
int main()
{
struct dados v[NUM_ALUNOS];
// int a[10]; Neste caso, não será necessário utilizar este vetor
int x;
for(x = 0; x < NUM_ALUNOS; x++)
{
printf("\nDigite o nome do %d aluno: ",x+1);
// fflush(stdin);
// fgets(v[x].nome, 20, stdin);
scanf("%s", v[x].nome); // Acredito que o scanf servirá bem neste caso
printf("\nDigite o %d numero: ",x+1);
scanf("%d",&v[x].numero);
}
// *a é a mesma coisa que a[0], então neste caso, você não estará mudando todo o vetor de inteiros, você só estará mudando o primeiro vetor
// Já que você já passa o struct v, não tem necessidade de utilizar o vetor a, pois você já esta passando os dados dentro do vetor e só precisa imprimir
// Se você quisesse utilizar o "a", você teria que passado como parâmetro manipula_pares(&v.numero, 10, a) e trocaria o protótipo da função para void manipula_pares (struct dados *x, int w, int *a); e modificaria dentro da função o vetor a
// Foi trocado o retorno da sua função, pois não precisaremos mais do retorno, já que alteramos tudo dentro da própria função
// Como o *a é a mesma coisa que o a[0], então isso é um inteiro e sua função estava retornando um porteiro de inteiro e colocando um inteiro
// *a = manipula_pares(&v.numero,10);
manipula_pares(v, NUM_ALUNOS);
for(x=0;x<NUM_ALUNOS;x++)
{
// Como foi falado, troquei para ao invés de imprimir o vetor a, imprimir direto a struct
printf("--- %d ", v[x].numero);
}
return 0;
}
void manipula_um_par (int *a)
{
*a = *a/2;
}
void manipula_pares(struct dados *x, int w)
{
int z;
for(z=0;z<w;z++)
{
if (x[z].numero % 2 == 0){
manipula_um_par(&x[z].numero);
}
}
}
One last comment, it is good practice to put more representative names in their variables/functions, so it is easier for other people to read and understand the flow of their code and what serves each piece of code.
x[10]
there is no.x
is an array of ten elements:x[0]
,x[1]
, ...x[9]
.– pmg