Ironed out a few things, but haven't run it.
Code:
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
void list_inv(char inv_items[ROWS][20], int inv_count); // Print inventory function
int inv_delete(char inv_items[ROWS][20], int inv_count); // Delete item function
int inv_read(char inv_items[ROWS][20]);
void inv_write(char inv_items[ROWS][20]); // Writes inventory to file
int main()
{
int menu;
char inv_items[ROWS][20];
int inv_count=0;
int done = 0;
while(done == 0)
{
printf("1. List Inventory\n2. Enter New Item\n3. Enter Number of Items\n4. Delete Item\n");
printf("5. Write Inventory to File\n6. Read Inventory from file\n7. Exit\n");
scanf("%d", &menu);
if(menu !=7)
{
// Menu Option 1: "List Inventory"
if(menu == 1)
{
list_inv(inv_items, inv_count);
}
// Menu Option 2: "Enter New Item"
if(menu == 2)
{
printf("Type in the name of the item you would like to add to inventory.\n");
scanf("%s", inv_items[++inv_count]);
}
// Menu Option 4: "Delete Item"
if(menu == 4)
{
printf("Enter the row number of the item you would like to delete.\n");
list_inv(inv_items, inv_count);
inv_count = inv_delete(inv_items, inv_count);
}
//Menu Option 5: "Write to file"
if(menu == 5)
{
inv_write(inv_items);
}
// Menu Option 6: "Read from file"
if(menu == 6)
{
inv_count = inv_read(inv_items);
}
// Precaution if non menu option is entered
if(menu != 1,2,3,4,5,6)
{
printf("You have entered an incorrect option, please choose a valid option.\n");
}
}
else
{
done++;
}
}
}
void list_inv(char inv_items[ROWS][20], int inv_count)
{
int i;
for(i=0;i<ROWS;i++)
{
printf("%s", inv_items[i]);
}
}
int inv_read(char inv_items[ROWS][20])
{
int i=0;
FILE *fp;
if((fp=fopen("inventory.txt", "r")) == NULL) {
printf("\nError: unable to open inventory file!\n");
return 0;
}
while((fgets(inv_items[i], 20, fp)) != NULL)
{
++i;
}
fclose(fp);
return i;
}
void inv_write(char inv_items[ROWS][20])
{
int i;
FILE *fp;
if((fp=fopen("inventory.txt", "w")) == NULL) {
printf("\nError: unable to open inventory file!\n");
return;
}
for(i=0;i<ROWS;i++)
{
fprintf(fp, "%s", inv_items[i]);
}
fclose(fp);
}
int inv_delete(char inv_items[ROWS][20], int inv_count)
{
int i;
char again='y';
printf("\n");
while(again=='y' || again=='Y') {
printf("Which row number do you want to delete? ");
scanf("%d", &i);
getchar();
if(i >= 0 && i < ROWS)
{
inv_items[i][0]='\0';
--inv_count;
}
else
printf("\nThat is an invalid row number. Please specify another.\n\n");
printf("Delete another item? [y/n]: ");
scanf("%c", &again);
getchar();
printf("\n");
}
return inv_count;
}
The variable inv_count is going to get slaughtered, so don't rely on it in your program. Pretty much just there for looks. Why? Because there is no way of "compacting" your inventory array. After #7 gets deleted, if you depend on the inv_count, your listing and printing to file, will cut off the last items (inv_items[9]).