What you probably want to do is
struct MyData {
int netID;
std::string major;
double gpa;
};
std::ostream& operator<<(std::ostream& os, const MyData& myData) {
os << "netId = " << myData.netId
<< ", major = " << myData.major
<< ", gpa = " << myData.gpa;
return os;
};
int main() {
std::ifstream file("studentData1.txt");
// If error in opening file then return
if (!file) {
std::cout << "Error opening file" << endl;
exit(1);
}
std::vector<MyData> majorArray;
std::string line;
while(std::getline(file,line)) {
std::istringstream iss(line);
MyData myData;
if(!(iss >> myData.netID >> myData.major >> myData.gpa)) {
// Handle parsing errors
}
else {
majorArray.push_back(myData);
}
}
for(const auto& major : majorArray) {
std::cout << major << std::endl;
}
return 0;
}
As you seem to have a restriction not letting you use a struct
and single vector as mentioned above, here's a slightly refactored example:
int main() {
std::ifstream file("studentData1.txt");
// If error in opening file then return
if (!file) {
std::cout << "Error opening file" << endl;
exit(1);
}
std::vector<int> netIDArray;
std::vector<std:string> majorArray;
std::vector<double> gpaArray;
std::string line;
while(std::getline(file,line)) {
std::istringstream iss(line);
int netId;
std::string major;
double gpa;
if(!(iss >> netID >> major >> gpa)) {
// Handle parsing errors
}
else {
netIDArray.push_back(netId);
majorArray.push_back(major);
gpaArray.push_back(gpa);
}
}
for(auto itNetId = std::begin(netIDArray),
itMajor = std::begin(majorArray),
itGpa = std::begin(gpaArray);
itNetId != std::end(netIdArray)) &&
itMajor != std::end(majorArray) &&
itGpa != std::end(gpaArray);
++itNetId, ++itMajor, ++itGpa) {
std::cout << "netId = " << *itNetId
<< ", major = " << *itMajor
<< ", gpa = " << *itGpa;
}
return 0;
}
And here's the raw array variant as you seem to be restricted to also:
int main() {
std::ifstream file("studentData1.txt");
// If error in opening file then return
if (!file) {
std::cout << "Error opening file" << endl;
exit(1);
}
const std::size_t InputSize = 15;
int netIDArray[InputSize ];
std:string majorArray[InputSize];
double gpaArray[InputSize];
std::string line;
for(std::size_t index = 0;
index < InputSize && std::getline(file,line);
++index) {
std::istringstream iss(line);
int netId;
std::string major;
double gpa;
if(!(iss >> netID >> major >> gpa)) {
// Handle parsing errors
}
else {
netIDArray[index] = netId;
majorArray[index] = major;
gpaArray[index] = gpa;
}
}
for(auto itNetId = std::begin(netIDArray),
itMajor = std::begin(majorArray),
itGpa = std::begin(gpaArray);
itNetId != std::end(netIdArray)) &&
itMajor != std::end(majorArray) &&
itGpa != std::end(gpaArray);
++itNetId, ++itMajor, ++itGpa) {
std::cout << "netId = " << *itNetId
<< ", major = " << *itMajor
<< ", gpa = " << *itGpa;
}
return 0;
}