ivank
вобщем в твоём примере я мало чего поняла...
но нашла хорошую книжку, где чуть ли не каждая буковка расталковывается, там прочитала о нужных мне функциях и вот что получилось (без malloc(), fseek(), ftell() etc...)
Код:
#include <stdio.h>
/* Proga pishit i chitaet dlia odnogo kataloga */
#define FALSE 0
#define TRUE !FALSE
struct vegetables
{
char name[40];
int caloricity;
}veg;
void write_info(void);
void read_info(void);
int main(void)
{
char c;
int done=FALSE;
while(!done)
{
puts("\n ***:: Vegatables Catalogue ::***\n");
puts(" A - Add new entry\n");
puts(" L - List entries\n");
puts(" Q - Quit\n");
printf(" Your choice is: ");
c = getch();
c = tolower(c);
switch(c)
{
case('a'):
puts(" Add new entry\n");
write_info();
break;
case('l'):
puts(" List all entries\n");
read_info();
break;
case('q'):
puts(" Quit\n");
done=TRUE;
break;
default:
puts(" Incorrect letter. Try again.");
done=FALSE;
break;
}
}
}
void write_info(void)
{
FILE *veget;
int calor;
printf("Enter product name: ");
gets(veg.name);
printf("Enter its caloricity per 100g: ");
veg.caloricity = scanf("%i",&calor);
veget = fopen("G:/Studies/Project/programm/vegetables.dat", "a");
if(!veget)
{
puts("Error openning file");
exit(1);
}
else
{
fwrite(&veg,sizeof(veg),1,veget);
}
fclose(veget);
puts("Entry added");
}
void read_info(void)
{
FILE *veget;
int x;
veget = fopen("G:/Studies/Project/programm/vegetables.dat", "r");
if(!veget)
{
puts("Error reading file");
return;
}
else
{
while(TRUE)
{
x=fread(&veg,sizeof(veg),1,veget);
if(!x) break;
printf("\nProduct Name: %s\n",veg.name);
printf("Its caloricity: %i\n",veg.caloricity);
}
}
fclose(veget);
}