Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Nicola

Erro no arranque de Programa em C

Recommended Posts

Nicola

Boas!

Tenho um problema num pequeno programa que estou a desenvolver.

É um programa em que sao inseridos dados sobre um aluno, depois esses dados sao guardados num vector que vai posteriormente ser utilizado para procurar alunos...

Por enquanto ainda so fiz a parte de inserçao de alunos... mas o programa quando arranca depois de inserir os dados avisa que a main deixou de funcionar.

Agradecia muito que alguem me pudesse corrigir este pequeno erro, agradeço desde ja a disponibilidade.

O codigo do meu programa é o seguinte...

#include <stdio.h>
#include <string.h>
#define Tamanho_Alunos 50

typedef struct {
char nome[100];
char morada[100];
int telefone;
} Tipo_Aluno;

void insere_no_final(Tipo_Aluno tamanho[], int n_alunos, Tipo_Aluno a)
{
tamanho[n_alunos] = a;
}


void ordena_por_nome(Tipo_Aluno tamanho[],int numero_alunos)
{
Tipo_Aluno a;
int i,j;
for(i = 1; i < numero_alunos; i++)
	a = tamanho[i];

for(j = i-1; (j >= 0) && (strcmp(a.nome, tamanho[j].nome)<0); j--)
	tamanho[j + 1] = tamanho[j];

tamanho[j+1] = a;
}

void ler_aluno(Tipo_Aluno *u,Tipo_Aluno tamanho_alunos[], int *numero)
{

fflush(stdin);
printf("Nome : \t");
gets(u->nome);
printf("Morada : \t");
gets(u->morada);
printf("Telefone : \t");
scanf("%d",&u->telefone);
insere_no_final(tamanho_alunos, *numero, *u);
*numero++;
ordena_por_nome( tamanho_alunos, *numero);

}

int main()
{
Tipo_Aluno aluno;
int t_alunos[Tamanho_Alunos];
int n_alunos = 0;
ler_aluno(&aluno, t_alunos, &n_alunos);
}

Share this post


Link to post
Share on other sites
Nicola

Ja experimentei tirar o int atras do main... mas ele continua a nao funcionar...

eu penso que o problema esta na declaraçao do t_alunos[Tamanho_Alunos], eu coloquei int porque nao sabia como declarar esse vector... alguem me pode ajudar sff

Share this post


Link to post
Share on other sites
Baderous

Tira o int que está atrás do main .... Acho que assim já resolve

Isso é uma asneira de todo o tamanho visto que todas as funções têm e devem indicar claramente o seu tipo de retorno. E o facto de tirares o "int" não quer dizer que ele desaparece. Para as funções que o programador não especifica o tipo de retorno, o compilador assume-o como sendo "int", logo ele continuava lá.

Eu vejo aí logo um erro no tipo do t_alunos. Na main dizes que é "int" e depois na função ler_aluno dizes que é Tipo_aluno. Depois tens também bastante coisas mal feitas como o uso do fflush(stdin) para limpar o buffer, ler strings com gets, deves ter também outros problemas a nível de apontadores.

Share this post


Link to post
Share on other sites
IRX773

Isso é uma asneira de todo o tamanho visto que todas as funções têm e devem indicar claramente o seu tipo de retorno. E o facto de tirares o "int" não quer dizer que ele desaparece. Para as funções que o programador não especifica o tipo de retorno, o compilador assume-o como sendo "int", logo ele continuava lá.

Eu vejo aí logo um erro no tipo do t_alunos. Na main dizes que é "int" e depois na função ler_aluno dizes que é Tipo_aluno. Depois tens também bastante coisas mal feitas como o uso do fflush(stdin) para limpar o buffer, ler strings com gets, deves ter também outros problemas a nível de apontadores.

Era uma experiencia ;) .... podia ser o compilador a "tripar-se"

Share this post


Link to post
Share on other sites
mogers

Era uma experiencia ;) .... podia ser o compilador a "tripar-se"

Podias ter feito a experiência localmente antes de mandar a posta ;)


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Share this post


Link to post
Share on other sites
IRX773

Pois  ;)  Eu normalmente quando encontro erros marados no meu código por vezes (95% da mesmas) é algo "estúpido" como isso, daí a minha "papaia".

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.