Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Nicola

Erro no arranque de Programa em C

Mensagens Recomendadas

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);
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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".

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.