My C program for making a database which stores data and from which data can be retrieved is stated later.But I am not able to write the function for editing the stored items correctly.Please suggest a method.Also suggest :1.mode in which file is to be opened in case 2 of the switch
2.Due to usage of scanf functions in case 1,strings with whitespaces cannot be entered correctly.Also if scanf("[^\n]",..)or gets(...) are used then problem is: stray '\n' is taken as input for the strings instead of taking any string from the user---please suggest!
#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;
char name[30];char company[50];
FILE *fpt;int menu(void);
entry *ptr,commodity;
int n=sizeof(entry);char ch,y;
void edit(entry *);
void main()
{
int choice;
do
{
choice=menu();
switch(choice)
{
case 1:ptr=(entry *)malloc(sizeof(entry));
fpt=fopen("data5.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:ptr=(entry *)malloc(sizeof(entry));
fpt=fopen("data5.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);
printf("\nWant to EDIT this entry?(Enter y/n):");
ch=getchar();
if(ch==y)
edit(ptr);
}
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.ADD a entry\n");
printf("2.DISPLAY cum EDIT\n");
printf("3.EXIT\n");
scanf("%d",&choice);
}while(choice!=1 && choice!=2 && choice!=3);
return(choice);
}
void edit(entry *ptr)
{
printf("\nWant to EDIT name of commodity?(y/n):");
ch=getchar();
if(ch==y)
{
printf("\nEnter new commodity name:");
scanf("%s",name);
ptr->name=name;
}
printf("\nWant to EDIT name of company?(y/n):");
ch=getchar();
if(ch==y)
{
printf("\nEnter new company name:");
scanf("%s",company);
ptr->company=company;
} //....etc..etc.
fwrite(ptr,n,1,fpt);
return;
}
:?: