Jump to content

Erro no arranque de Programa em C


Nicola
 Share

Recommended Posts

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);
}
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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"

Link to comment
Share on other sites

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.

Link to comment
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
 Share

×
×
  • Create New...

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.