-
double registration
Hy, i have some problems with a code.. When i choose to display the content of a file, the last registration is displayed twice.
http://img121.imageshack.us/img121/336/afisare.jpg
This is the code:
Code:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
typedef struct
{
unsigned int id;
char nume[30], model[50], carburant[10];
int pret, km, putere, an_fab;
int is; //indicator stare
} masini;
/*************/
/*CREATE FILE**/
/*************/
void creare_fisier()
{
char fis[20];
FILE* f;
int opt_1;
masini x;
unsigned int id=1;
printf("\n > Nume fisier: ");
scanf("%s",&fis);
f=fopen(fis,"r+b");
if (f)
{
printf("\nFisier deja existent!");fclose(f);Sleep(1500);
printf("\n\n------------------------------------");
printf("\n0. Intoarcere in meniul principal");
printf("\n1. Stergere");
printf("\n------------------------------------");
printf("\n\n > Alegeti optiunea: ");
fflush(stdin);
scanf("%d",&opt_1);
if(opt_1==1)
{
remove(fis);
printf("\nFisierul \"%s\" a fost sters cu succes!",fis);
Sleep(2000);
}
}
else
{
f=fopen(fis,"w+b");
printf("\n > Nume marca masina cod %u sau Ctrl+Z pt salvare BD: ",id);
fflush(stdin);
gets(x.nume);
while (!feof(stdin))
{
x.is=1;
x.id=id;
printf("\n > Modelul masinii: ");
fflush(stdin);
gets(x.model);
printf("\n > Carburant: ");
fflush(stdin);
gets(x.carburant);
printf("\n > Pret [EURO]: ");
scanf("%d",&x.pret);
printf("\n > Kilometraj: ");
scanf("%d",&x.km);
printf("\n > Putere [CP]: ");
scanf("%d",&x.putere);
printf("\n > Anul fabricatiei: ");
fflush(stdin);
scanf("%d",&x.an_fab);
fseek(f,(id-1)*sizeof(masini),0);
fwrite(&x,sizeof(masini),1,f);
id++;
printf("\n > Numele urmatoarei masini cod %u sau Ctrl+Z pt salvare BD: ",id);
fflush(stdin);
gets(x.nume);
}
fclose(f);
}
}
int nr_art(FILE *f, int l)
{
int poz=ftell(f);
fseek(f,0,2);
int c=ftell(f)/l;
fseek(f,poz,0);
return c;
}
/******************************/
/*DISPLAY THE CONTENT OF THE FILE*/
/******************************/
void afisare()
{
FILE *f;
masini x;
int i;
char fis[20];
printf("\n > Numele fisierului sursa: ");
scanf("%s",&fis);
f=fopen(fis,"rb") ;
if(f==0)
{
printf("\nEroare! Nu exista fisierul cerut.");
Sleep(2000);
}
else
{
fseek(f,0,0);
fread(&x, sizeof(masini),1,f);
for(int i=0;i<=nr_art(f,sizeof(masini));i++)
if(x.is==1)
{
printf("\n\n > Codul masinii: %u", x.id);
printf("\n > Numele marcii masinii: %s", x.nume);
printf("\n > Modelul masinii: %s", x.model);
printf("\n > Carburant: %s", x.carburant);
printf("\n > Pretul: %u EURO", x.pret);
printf("\n > Kilometraj: %u Km", x.km);
printf("\n > Putere: %u CP", x.putere);
printf("\n > Anul fabricatiei: %u", x.an_fab);
fread(&x,sizeof(masini),1,f);
}
else fread(&x,sizeof(masini),1,f);Sleep(2000);
fclose(f);
}
}
/******/
/*MAIN */
/******/
int main(void)
{
int optiune;
while(optiune)
{
cuprins();
scanf("%d",&optiune);
switch(optiune)
{
case 1 : creare_fisier(); break;
case 2 : adaugare(); break;
case 3 : stergere(); break;
case 4 : afisare(); break;
case 5 : actualizare_pret(); break;
case 6 : selectare(); break;
case 0 : printf("\n Multumesc pentru testarea programului!\n"); exit(1);
default: {printf("\nOptiune inexistenta!"); Sleep(1500); break;}
}
}
getch();
}
-