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

gunky

Imprime-me 2 vezes 1 campo da estrutura...PQ??!

3 mensagens neste tópico

Boas

tenho um programa representado com o seguinte codigo

//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! getch da warning em vs 2005  _getch->OK 
#define _CRT_SECURE_NO_DEPRECATE 1

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h> 
#include <ctype.h>
#include <time.h>


typedef struct aluno{

char nome[150];
char cod[10];  //codigo do aluno e unico
int idade;
//Disciplina inscricao;  // campo que guarda as disciplinas o nivel e as notas do aluno
}ALUNO;


ALUNO array_a[200];	

void escreve(ALUNO *al)
{
FILE *fp;
int i=0;


fp=fopen("Alunos.dat","wb");
if(fp==NULL)
	printf("Erro abrir ficheiro");


for(i=0;i<=1;i++)
{
	printf("nome:\n");
	fflush(stdin);
	scanf(" %s",&(array_a[i].nome));

	printf("codigo:\n");
	fflush(stdin);
	gets(array_a[i].cod);
	printf("idade:\n");	
	fflush(stdin);
	scanf(" %d", &(array_a[i].idade));	 
	printf("\n\n");

	fwrite(&al,sizeof(ALUNO),1,fp);

}
fclose(fp);

fp=fopen("Alunos.dat","rb");
if(fp==NULL)
	printf("Erro abrir ficheiro");






for(i=0;i<=1;i++)
{
	while ( fread(&al, sizeof(ALUNO), 1, fp) == 1 )


	puts(array_a[i].nome);// probs aqui

	printf("codigo ------ %s\n", array_a[i].cod);
	printf("idade ------ %d\n", array_a[i].idade);
	system("pause");

}

fclose(fp);

}

int main()
{
ALUNO  n;

escreve(&n);

return 0;

}

acontece q ele guarda bem os dados no ficheiro mas quando ponho-me a ler os valor imprime-me 2 vezes o nome do 1 utilizador que introduzi....

onde e que esta o erro?!?!'

tks in advance

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim muito de repente...

É mesmo suposto o "puts(array_a.nome);" estar dentro do ciclo "while ( fread(&al, sizeof(ALUNO), 1, fp) == 1 )" ?

Nota que ao não colcar chavetas nem ; a primeira operação seguinte é considerada dentro do while. É mesmo isso que queres?

Ou seja o teu código está equivalente a ter:

while ( fread(&al, sizeof(ALUNO), 1, fp) == 1 )
{
      puts(array_a[i].nome);// probs aqui
}

É mesmo isto que pretendes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim muito de repente...

É mesmo suposto o "puts(array_a.nome);" estar dentro do ciclo "while ( fread(&al, sizeof(ALUNO), 1, fp) == 1 )" ?

Nota que ao não colcar chavetas nem ; a primeira operação seguinte é considerada dentro do while. É mesmo isso que queres?

Ou seja o teu código está equivalente a ter:

while ( fread(&al, sizeof(ALUNO), 1, fp) == 1 )
{
      puts(array_a[i].nome);// probs aqui
}

É mesmo isto que pretendes?

Amen ao dexter.... o erro esta ai...danke

0

Partilhar esta mensagem


Link 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