Jump to content

Passagem de apontadores


Sota
 Share

Recommended Posts

void Le_fich(struct PLANO *Plan){
FILE *file;
int i,j=0,exit=0, n_estacoes,n_pecas,estacao;
char modo;
struct PLANO *Planos;
Planos =(PLANO*) calloc(1, sizeof(struct PLANO));
file=fopen("planotrabalho.txt","r");
while(exit==0){
	j++;
	if (fscanf(file,"%d %d ",&n_estacoes, &n_pecas)!=EOF){
		printf("Plano: %d---------------------------------------\n",j);
	//	printf("Numero de estacoes: %d\nnumero de pecas: %d\n",n_estacoes,n_pecas);

	Planos =(PLANO*) realloc(Planos, j);
	(Planos+(j-1))->n_estacoes=n_estacoes;
	(Planos+(j-1))->n_pecas=n_pecas;
	(Planos+(j-1))->estacoes= (int *) calloc(n_estacoes+1,sizeof(int));
	(Planos+(j-1))->modo= (char *) calloc(n_estacoes+1,sizeof(char));
	printf("Numero de estacoes: %d\nnumero de pecas: %d\n",(Planos+(j-1))->n_estacoes,(Planos+(j-1))->n_pecas);
	}
	else
		exit=1;
	for (i=0;i<n_estacoes;i++){
		if(fscanf(file,"%d %c ", &estacao, &modo)!=EOF){
			//printf("Estacao numero %d  modo %c\n",estacao,modo);
			(Planos+(j-1))->estacoes[i]=estacao;
			(Planos+(j-1))->modo[i]=modo ;
			printf("Estacao numero %d  modo %c\n",(Planos+(j-1))->estacoes[i],(Planos+(j-1))->modo[i]);
		}
		else
			exit=1;
	}
};
Plan = Planos;
fclose(file);
}

Noutro .c faço:

void EscolherPlano(){
struct PLANO *Plano;
int c;
Le_fich(Plano);
printf("Escolha o numero do plano:\n");
scanf("%d",&c);
printf("numero de estacoes: %d \n",(Plano+(c-1))->n_estacoes);

}

Tou a fazer bem?? é que o programa arrebenta no printf final ?

Link to comment
Share on other sites

Se rebentava num printf há algo que n deve estar resolvido por causa de um return... penso eu de que...

Corre o valgrind e vê o q t diz...

Já agora isso tá um bocado confuso, e essa notação ponteiriça tb n ajuda muito... podias sempre escrever

Planos[j-1].n_estacoes=n_estacoes;

em vez de

(Planos+(j-1))->n_estacoes=n_estacoes;

e também acho q n é muito feliz andar em todo o lado com j-1, quando podes incrementar o j no final do ciclo while ou começar em 1 em vez de 0...

mas se funciona siga q é quase natal

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.