I am trying to prepare a database using C,which can store data and from which data can be retrieved and edited.
First storing,then retrieving data from the file works.But,during first run of the prog if choice#2(i.e.,DISPLAY)is entered without entering any data using choice#1(although the file contains data),then error occurs,gets hung.A part of the prog is shown:

#

include<stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>typedef struct {
  char name[30];
  char company[50];
  char address[200];
  char pin[7];
  char web[30];
  }entry;
FILE *fpt;int menu(void);
entry *ptr,commodity;
int n=sizeof(entry);
void main()
{
 int choice;
 do
 {
 choice=menu();
 switch(choice)
 {
  case 1:ptr=(entry *)malloc(sizeof(entry));
   fpt=fopen("data4.bin","a");
   printf("\nEnter the name of the commodity:");
   scanf("%s",ptr->name);
   printf("\nEnter the name of the producing company:");
   scanf("%s",ptr->company);
   printf("\nEnter the address of the producing company:");
   scanf("%s",ptr->address);
   printf("\nEnter the pincode:");
   scanf("%s",ptr->pin);
   printf("\nEnter the website of the producing company:");
   scanf("%s",ptr->web);
   fwrite(ptr,n,1,fpt);printf("ENTERED\n");
   fclose(fpt);
   continue;
  case 2:fpt=fopen("data4.bin","r");
         
     do 
     {
     if (fread(&ptr->name, sizeof(ptr->name), 1, fpt) == 1 &&
       fread(&ptr->company, sizeof(ptr->company), 1, fpt) == 1 &&
       fread(&ptr->address, sizeof(ptr->address), 1, fpt) == 1 &&
       fread(&ptr->pin, sizeof(ptr->pin), 1, fpt) == 1 && 
       fread(&ptr->web, sizeof(ptr->web), 1, fpt) == 1)
         {
         printf("\n\nThe name of the commodity:");
      printf("%s",ptr->name);
      printf("\nThe name of the producing company:");
      printf("%s",ptr->company);
      printf("\nThe address of the producing company:");
      printf("%s",ptr->address);
      printf("\nPincode:");
      printf("%s",ptr->pin);
      printf("\nWebsite of the producing company:");
      printf("%s",ptr->web);
        }
   else if (feof(fpt)) 
          {
    printf("\n\nfinished reading file!\n");
    break;
    }
   else {
    printf("an error occured while reading the file!\n");
    break;
    }
} while (1);
         fclose(fpt);continue;
    case 3:printf("\nThank You for using!");exit(1);              
 }
 }while(choice==1||choice==2);
 getch();
}
int menu(void)
{
 int choice;
 do{
  printf("Enter your choice:\n");
  printf("1.CREATE the linked list\n");
  printf("2.DISPLAY\n");
  printf("3.EXIT\n");
  scanf("%d",&choice);
 }while(choice!=1 && choice!=2 && choice!=3);
 return(choice);
}

Please suggest the cause of this error!

During the first choice how will the file contains data????
The file will not be created at all ...

Got the problem. In case 2 u have to declare ptr.
Use ptr=(entry *)malloc(sizeof(entry)); after case 2 also

Thanks a lot Mr.dilip.mathews,your suggestion helped me to correct my prog.Now it is working.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.