Why is my program failing to close? These names and phone numbers are what I am trying to load into the array and display.

Yaztremski 592-48-1003
Tilden 355-71-8210
Charles 290-65-8817
Balboa 458-12-9834
Watterson 234-98-0023
Jefferson 303-41-5692
Carmichael 392-60-0932
Martin 418-77-0974
Davila 339-89-4475
Jacobs 228-42-0547
Dobbs 219-52-4058
Nastromo 628-79-2516
Rivers 611-69-7045
Williams 498-12-3362
Georgopolis 204-65-8006
Espinosa 457-68-8103
Knight 566-10-3369
Morgan 285-69-2746
Lawrence 300-20-5638
Silverius 605-12-0882 



#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <conio.h>
using namespace std;

enum columns{Lname=0, SSN=1};

const int MAXELEMENTS = 20;

//Function prototypes
void Pause();
void Pause(char *,int);
int SearchSerial(string [][2],int,string, int);

void Sort(string [][2],int,char direction='A');
void Sort(string *[][2],int,char direction='A');

int main()
{
    //Declare an array of string VALUES
    string LnameSSN[MAXELEMENTS][2];
    //Declare an array of POINTERS to string values
    string * p2LnameSSN[MAXELEMENTS][2]= {NULL};

    int index;
    fstream dataIn;

    string filePath ="H:\\Lab2.csv";

    //Open the data file
    dataIn.open(filePath.c_str(),ios::in);
    if(dataIn.fail())
    {
         cout << "Unable to open the data file." << endl;
        ("pause");
         return 999;
    }

    index = 0;  //initialize the subscript var

    while(!dataIn.eof())
    {
        //Load the values array
        getline(dataIn,LnameSSN[index][Lname],',');
        getline(dataIn,LnameSSN[index][SSN],'\n');

        //Load the pointers array
        p2LnameSSN[index][Lname] = &LnameSSN[index][Lname];
        p2LnameSSN[index][SSN] = &LnameSSN[index][SSN];
        index++;
    }

    dataIn.close();
    if(dataIn.fail())
    {
        cout << "Failed to close the data file." << endl;
        ("pause");
        return 888;
    }
}

Edited 3 Years Ago by Dani: Formatting fixed

can you copy your code, paste it on here. then highlight it and click the (CODE) button??? that puts it in code like visual studios has it.

Edited 3 Years Ago by mike_2000_17: Fixed formatting

Looping while(!data.eof()) is incorrect. It causes one extra (unwanted) read, which in your case leads to a classic buffer overflow.

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <conio.h>
using namespace std;

enum columns{Lname=0, SSN=1};

const int MAXELEMENTS = 20;

//Function prototypes
void Pause();
void Pause(char *,int);
int SearchSerial(string [][2],int,string, int);

void Sort(string [][2],int,char direction='A');
void Sort(string *[][2],int,char direction='A');

int main()
{
//Declare an array of string VALUES
string LnameSSN[MAXELEMENTS][2];
//Declare an array of POINTERS to string values
string * p2LnameSSN[MAXELEMENTS][2]= {NULL};

int index;
fstream dataIn;

string filePath ="H:\\Lab2.csv";

//Open the data file
dataIn.open(filePath.c_str(),ios::in);
if(dataIn.fail())
{
cout << "Unable to open the data file." << endl;
("pause");
return 999;
}

index = 0; //initialize the subscript var

while(!dataIn.eof())
{
//Load the values array
getline(dataIn,LnameSSN[index][Lname],',');
getline(dataIn,LnameSSN[index][SSN],'\n');

//Load the pointers array
p2LnameSSN[index][Lname] = &LnameSSN[index][Lname];
p2LnameSSN[index][SSN] = &LnameSSN[index][SSN];
index++;
}

dataIn.close();
if(dataIn.fail())
{
cout << "Failed to close the data file." << endl;
("pause");
return 888;
}
}

Looping while(!data.eof()) is incorrect. It causes one extra (unwanted) read, which in your case leads to a classic buffer overflow.

So what needs to be used instead?

This article has been dead for over six months. Start a new discussion instead.