display problem after retrieving from text
turbo c++ v4.5 compiler
Win ME
Here's my problem..
if i choose to view a record / ALL the record
the program can display it properly BUT it display twice..y?
pls check my below code
Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct date_en{
int dd,mm,yy;
};
struct data{
int id;
char name[20];
char addy[30];
int age;
struct date_en date;
};
add_new_rec(FILE *ptr)
{
ptr=fopen("details.dat","a+");
struct data info;
printf("Enter ID: ");
info.id=0;
while(info.id < 1000 || info.id > 9999)
{
scanf("%d",&info.id);
}
printf("\nEnter Name: ");
scanf(" %[^\n]",info.name);
fflush(stdin);
printf("\nEnter Addy: ");
scanf(" %[^\n]",info.addy);
fflush(stdin);
printf("\nEnter age: ");
scanf("%d",&info.age);
printf("Enter date: ");
scanf("%d",&info.date.dd);
printf("/");
scanf("%d",&info.date.mm);
printf("/");
scanf("%d",&info.date.yy);
fwrite(&info,sizeof(struct data),1,ptr);
fclose(ptr);
return 0;
}
void view_all_rec(FILE *fptr)
{
struct data info;
fptr=fopen("details.dat","r");
rewind(fptr);
while(!feof(fptr) )
{
fread(&info,sizeof(struct data),1, fptr);
printf("%d\n",info.id);
printf("%s\n",info.name);
printf("%s\n",info.addy);
printf("%d\n",info.age);
printf("%d/%d/%d",info.date.dd,info.date.mm,info.date.yy);
printf("press any key for next record!");
getch();
}
fclose(fptr);
}
void view_rec(FILE *ptr)
{
struct data info;
ptr=fopen("details.dat","r");
int searchkey;
printf("Input ID no to search");
scanf("%d",&searchkey);
// rewind(ptr);
while(!feof(ptr) )
{
fread(&info,sizeof(struct data),1, ptr);
if (info.id == searchkey)
{
printf("%d\n",info.id);
printf("%s\n",info.name);
printf("%s\n",info.addy);
printf("%d\n",info.age);
printf("%d/%d/%d",info.date.dd,info.date.mm,info.date.yy);
getch();
}
}
fclose(ptr);
}
int print_menu()
{
int choice;
printf("##########################\n");
printf("# 1.Add New Record #\n");
printf("# 2.View Record #\n");
printf("# 3.View all Record #\n");
printf("##########################\n");
printf("Please choose what option you want:");
scanf("%d",&choice);
return choice;
}
main()
{
FILE *ptr;
char dum;
int choose;
if((ptr = fopen ("details.dat","r"))==NULL){
ptr = fopen ("details.dat","w");
}
do {
choose=print_menu();
switch(choose)
{
case 1: add_new_rec(ptr);
break;
case 2: view_rec(ptr);
break;
case 3:
view_all_rec(ptr);
break;
default:
printf("Error - Wrong Option!");
scanf("%c",&dum);
getch();
clrscr();
}
} while (choose !=3);
return 0;
}