Jump to content

[Resolvido] Ficheiros em c++


nando_ice

Recommended Posts

preciso de ajuda estou a fazer um programa k consiste na criacao de uma esturar de uma companhia de gas... tenho um problemas na minha funcao inserir sempre k tento inserir um novo ele cria-me outro fixeiro, alguem me pode ajudar?'?? aki vai o exerto do programa se precisarem de mais alguma coisa digam!!

cumps fernando lopes

void inserir(void)
{
char resp;

FILE *f;

if ((f=fopen("dadoscliente.dat","w+"))==NULL)
{
	f=fopen("dadoscliente.dat","w");
}

do {
	printf("Codigo Cliente: ");
	scanf("%d",&reg.codigo);
	printf("Nome: ");
	fflush(stdin);
	gets(reg.nome);
	printf("Rua: ");
	fflush(stdin);
	gets(reg.rua);
	printf("Numero porta: ");
	fflush(stdin);
	scanf("%d",&reg.numporta);
	printf("Andar: ");
	fflush(stdin);
	gets(reg.andar);
	printf("Localidade: ");
	fflush(stdin);
	gets(reg.localidade);
	printf("Numero garrafas compradas: ");
	fflush(stdin);
	scanf("%d",&reg.numgarrafas);

	fseek(f,0,SEEK_END);
	fwrite(&reg,sizeof(reg),1,f);

	printf("Novo cliente? (s/n)");
	do {
		scanf("%c",&resp);
	}while (resp!='n' && resp!='s');

}while (resp!='n');
fclose(f);
}
Link to comment
Share on other sites

Bem vindo ao fórum nando_ice.

Usa a ferramenta GeSHi para postares código, assim o teu código fica mais legível para os leitores, como podes ver agora.

Sobre o teu problema, deve-se ao modo de abertura do ficheiro, o que deves querer é isto:

fopen("dadoscliente.dat","a+")

Dá uma leitura nesta thread: Portugal-a-Programar  |  Linguagens  |  C  |  structs e ficheiros

Espero ter resolvido o problema, cumpr. bk@ero 😁

Link to comment
Share on other sites

  • 2 weeks later...

mas kando ponho o +a depois ira-me dar um erro que nao ocorre no c++ e nao me executar a funcao eliminar pk nao cria o "fixeiro temp.dat" e depois nao muda de nome para "dadoscliente.dat".

remove("dadosclliente.dat");
rename("temp.dat, dadoscliente");

Não percebi, podias explicar melhor o teu problema? Eu não vejo no código isso do remove e rename.

Tu para apagares/mudares de nome dum ficheiro, tens de o encerrar primeiro.

Por isso essas instruções devem aparecer depois do fclose(f).

Cumpr. bk@ero  ?

Link to comment
Share on other sites

void inserir(void)
{
char resp;

FILE *f;

if ((f=fopen("dadoscliente.dat","r+"))==NULL)
{
	f=fopen("dadoscliente.dat","w");
	reg.codigo=0;
}
else{
		fseek(f,0,SEEK_END);
		fseek (f,ftell(f)-sizeof(reg),SEEK_SET);
		fread(&reg,sizeof(reg),1,f);
}

do {
	reg.codigo=reg.codigo+1;				
	printf("Codigo de cliente: %d\n",reg.codigo);
	printf("Nome: ");
	fflush(stdin);
	gets(reg.nome);
	printf("Rua: ");
	fflush(stdin);
	gets(reg.rua);
	printf("Numero porta: ");
	fflush(stdin);
	scanf("%d",&reg.numporta);
	printf("Andar: ");
	fflush(stdin);
	gets(reg.andar);
	printf("Localidade: ");
	fflush(stdin);
	gets(reg.localidade);
	printf("Numero garrafas compradas: ");
	fflush(stdin);
	scanf("%d",&reg.numgarrafas);

	fseek(f,0,SEEK_END);
	fwrite(&reg,sizeof(reg),1,f);

	printf("Novo cliente? (s/n)");
	do {
		scanf("%c",&resp);
	}while (resp!='n' && resp!='s');

}while (resp!='n');
fclose(f);
}
 

tenho aki o codigo e agora funciona a 100%, nao preciso do "a+" tb podes por no "fseek(f,0,SEEK_END);" e ele ira sempre para o ultimo registo...

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
×
×
  • 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.