Ir ao conteúdo
  • Cadastre-se
lariinhaxd

Erro em linguagem C usando structs e funções

Recommended Posts

Remova as dimensões de arrays presentes nestas linhas do seu código F5Rua4D.gif:


acumNotas (sala, acumnotas[T][3], acumaluno [T]);
mostraNotas (sala, acumnotas[T][3], acumaluno [T]);

Espero ter ajudado GbhmuXl.gif.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Remova as dimensões de arrays presentes nestas linhas do seu código F5Rua4D.gif:


acumNotas (sala, acumnotas[T][3], acumaluno [T]);
mostraNotas (sala, acumnotas[T][3], acumaluno [T]);

Espero ter ajudado GbhmuXl.gif.

Olá rjjj, retirei as dimensões e deu na mesma... voce ve outro erro de sintaxe??

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá rjjj, retirei as dimensões e deu na mesma... voce ve outro erro de sintaxe??

Não vejo. Também testei aqui e compilou normalmente após corrigir isso F5Rua4D.gif.

Tente especificar os tamanhos de todas as dimensões de todas as arrays do código que são parâmetros.

Espero ter ajudado GbhmuXl.gif.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

cjjj, ainda nao esta compilando aqui, nao sei o que estou fazendo de errado, pode me mandar o código que deu certo no seu pc??

obrigada mesmo por me ajudar, programação nao é muito a minha praia, mas esta cadeira de programação é obrigatoria no meu curso :P

Remova as dimensões de arrays presentes nestas linhas do seu código F5Rua4D.gif:


acumNotas (sala, acumnotas[T][3], acumaluno [T]);
mostraNotas (sala, acumnotas[T][3], acumaluno [T]);

Espero ter ajudado GbhmuXl.gif.

Olá rjjj, retirei as dimensões e deu na mesma... voce ve outro erro de sintaxe??

Compartilhar este post


Link para o post
Compartilhar em outros sites

lariinhaxd,

Deixei compilável, não testei mais nada...

#include <stdio.h>
#include <stdlib.h>
#define T 5

struct Programacao
{
char aluno[31];
float notas[3];
};

void lerNotas (struct Programacao sala[]);
void acumNotas (struct Programacao sala[], float acumnotas[][3], float acumaluno []);
void mostraNotas (struct Programacao sala[], float acumnotas[][3], float acumaluno []);

int main()
{
struct Programacao sala[T];
float acumnotas[T][3], acumaluno[T];
int x;
for (x=0; x<T; x++)
acumaluno[x]=0;
lerNotas (sala);
acumNotas (sala, acumnotas, acumaluno);
mostraNotas (sala, acumnotas, acumaluno);
return 0;
}

void lerNotas (struct Programacao sala[])
{
int x, y;
for (x=0; x<T; x++)
{
printf ("Nome do aluno %d", (x+1));
gets (sala[x].aluno);
for (y=0; y<3; y++)
{
printf ("Nota %d", (y+1));
scanf ("%f%*c", &sala[x].notas[y]);
}
}
}

void acumNotas (struct Programacao sala[], float acumnotas[][3], float acumaluno [])
{
int x, y;
for (x=0; x<T; x++)
{
for (y=0; y<3; y++)
{
acumnotas [x][y] = sala[x].notas[y];
acumaluno[x] = acumaluno[x] + sala[x].notas[y];
}
}
}

void mostraNotas (struct Programacao sala[], float acumnotas[][3], float acumaluno [])
{
int x, y, soma=0, cont=0;
printf ("\n Nota 1\t Nota 2\t Nota 3\t Media\n");
for (x=0; x<T; x++)
{
for (y=0; y<3; y++)
{
printf (" %.1f\t", acumnotas[x][y]);
}
printf (" %.1f\n", acumaluno[x]/3);
}
for (x=0; x<T; x++)
for (y=0; y<3; y++)
soma = soma + acumnotas[x][y];
for (x=0; x<T; x++)
if ((soma/(T*3)) < (acumaluno[x]/3))
cont++;
printf ("\nMedia da turma: %.1f", ((float)soma/(T*3)));
printf ("\nTotal de alunos com media superior a media da turma = %d\n", cont);
}

[]'s

LNW

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá lariinhaxd,

obrigaada, agora esta compilando direitinho, era só um erro na hora de passar a matriz por parametro né?

Sim.. e também a declaração do struct que foi movida para figurar antes dos protótipos das funções.

Na função mostraNotas, eu sugiro declarar a variável soma (ou qualquer outra que envolva notas) como float também.

Bons estudos, lariinhaxd. ;)

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

Graças ao LNW, descobri qual era o outro problema do seu código GbhmuXl.gif.

Existe o tipo de dado incompleto, que não pode descrever o tamanho do dado. Um exemplo clássico é o tipo void, de modo geral.

Acontece que os tipos de dados de structs também podem ser incompletos, apesar ser possível completá-los depois.

Ao utilizar nos parâmetros dos protótipos de funções um tipo de dado de struct que seria declarado só adiante no código, você fez com que ele virasse um tipo incompleto. No entanto, ele seria completado logo depois F5Rua4D.gif.

De acordo com o parágrafo 6.7.5.3/12 da documentação oficial ISO/IEC 9899:201x, isso é aceitado e, por isso, o compilador que uso não apontou mais erros no código. Pesquisando na Internet, li um membro de um fórum dizendo que aparentemente isso é um bug do MinGW, o compilador do Code::Blocks, que se não me engano é o seu IDE.

Espero ter ajudado GbhmuXl.gif.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E, interessante, pois com o GNU g++ (compilador para código C++) consigo compilar daquela forma normalmente.

Já com o gcc, tenho que fazer dessa forma que mostrei acima, ou fazendo tipo um forward declaration:

struct Programacao;

void lerNotas (struct Programacao*);
void acumNotas (struct Programacao*, float acumnotas[][3], float acumaluno []);
void mostraNotas (struct Programacao*, float acumnotas[][3], float acumaluno []);

struct Programacao
{
char aluno[31];
float notas[3];
};

Só que o caboclo lá fala sobre ser um problema no ambiente de desenvolvimento MinGW (Windows), mas acabei de testar e o problema também ocorre no Linux.

Apenas para confirmar, o link seria este: http://stackoverflow.com/questions/371608/c-typedef-parameter-has-incomplete-type ?

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites
E, interessante, pois com o GNU g++ (compilador para código C++) consigo compilar daquela forma normalmente.

Já com o gcc, tenho que fazer dessa forma que mostrei acima, ou fazendo tipo um forward declaration:

struct Programacao;

void lerNotas (struct Programacao*);
void acumNotas (struct Programacao*, float acumnotas[][3], float acumaluno []);
void mostraNotas (struct Programacao*, float acumnotas[][3], float acumaluno []);

struct Programacao
{
char aluno[31];
float notas[3];
};

Só que o caboclo lá fala sobre ser um problema no ambiente de desenvolvimento MinGW (Windows), mas acabei de testar e o problema também ocorre no Linux.

Apenas para confirmar, o link seria este: http://stackoverflow.com/questions/371608/c-typedef-parameter-has-incomplete-type ?

[]'s

LNW

Exatamente. Referi-me ao post "The warning seems to be a bug with the current MinGW...".

Espero ter ajudado GbhmuXl.gif.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×