I'm trying to store the contents of a file containing names of herbs and spices (items) in a 2D array called PantryContents. Then I'm trying to add an item to that array. It seems like only one item is being stored at a time, but the output is correct but when I check the content of PantryContents, only one item shows up (like it's not 2D).
This will be split into functions eventually.. (that's why the format is a little funky), I just needed to make it work all together first. Any ideas?
This is what's in the file "Pantry.txt":
-ground cumin
-cayenne pepper
-salt
-pepper
-dill
-ground cinnamon
-garlic powder
#include <iostream>
#include <fstream>
using std::cin;
using std::cout;
using std::ifstream;
int main()
{
const int size = 100;
ifstream data_file ( "Pantry.txt" );
char items[size];
char ** PantryContents = nullptr;
int ** frequencyArray = nullptr;
int num_items = 0;
if ( data_file.is_open () )
{
while ( !data_file.eof() )
{
data_file.getline( items, size ); //reads file
num_items++;
//cout << num_items << items << '\n'; //displays contents
PantryContents = new char * [num_items + 1]; //increase array by one?
for ( int i = 0 ; i < num_items; i++)
{
PantryContents[i] = &items[i]; //stick items in PantryContents array
}
PantryContents[num_items] = new char [strlen(items) + 1]; //new spot has enough space for the new items
strcpy(PantryContents[num_items], items); //copy the items into the PantryContents
num_items++; //increase the number
cout << *PantryContents <<'\n';
}
data_file.close();
}
char ** temp = 0;
char addition[255];
char confirm = 'Y';
int num = 0;
while (confirm == 'Y' || confirm == 'y')
{
cout << "Please enter item: ";
cin >> addition;
PantryContents = new char * [num_items + 1];
for (int i = 0; i < num; i++)
{
PantryContents[i] = temp[i];
}
PantryContents[num_items] = new char[strlen(addition) + 1];
strcpy(PantryContents[num_items], addition);
num_items++;
delete[] temp;
temp = PantryContents;
cout << "\nWould you like to enter another item? Y/N :";
cin >> confirm;
for (int i = 0; i < num_items; i++)
{
cout << *PantryContents << '\n';
}
}
for (int i = 0; i < num_items; i++)
{
delete[] PantryContents[i];
}
delete[] PantryContents;
return 0;
}