I can't seem to figure out why my code is not reading in the data to use in a switch case. When I write it to a file, it just pulls up garbage. Can anyone help?
void readData(Name element[], int size)
{
ifstream infile("treeData.txt");
int index = 0;
string line, common, scientific, family;
int name;
infile.open("treeData.txt");
{
{
while((index < size) && (infile >> name >> common >> scientific >> family))
{
if(name >= 0 && name <= 100)
{
infile >> element[index].treeID;
element[index].treeID = name;
infile >> element[index].commonName;
element[index].commonName = common;
infile >> element[index].scientificName;
element[index].scientificName = scientific;
infile >> element[index].familyName;
element[index].familyName = family;
index++;
size = index;
}
else
cout << "The file was not found!";
}
}
}
infile.close();
}
Your implementation should take advantage of the extensibility features of the C++ IOStreams library. You can create an overload of operator >>
so that any input stream can extract data into a Name
object. It's also advised that instead of extracting the data into an array (like you've attempted in your readData
function) you extract it into a single object. That way code can be built on top of this functionality. It's also a more logical and straighforward way of performing extraction:
std::istream& operator>>(std::istream& is, Name& n)
{
if (!is.good())
return is;
int id;
std::string line, common, scientific, family;
if (is >> id >> common >> scientific >> family)
{
if (id >= 0 && id <= 100)
n.treeID = id;
n.treeID = name;
n.commonName = common;
n.scientificName = scientific;
n.familyName = family;
}
return is;
}
Now that we have our extractor, we can go ahead and create an array of Name
objects and use the extractor for each element:
std::ifstream infile("treeData.txt");
std::array<Name, 5> names;
for (auto name : names)
{
infile >> name;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.