My text file looks like this
Fruit
Vegetable
And I need the function to return Vegetable
This is the code I tried to use and get "Vegetable":
String getItem()
{
ifstream stream("data.txt");
stream.ignore ( 1, '\n' );
std::string line;
std::getline(stream,line);
std::string word;
return word.c_str();
}
Then I did this to try and put the second line into an edit box:
void __fastcall TMainForm::FormShow(TObject *Sender)
{
Edit1->Text = getItem();
}
For some reason, when I run the code the Edit Box eventually just has nothing in it, completely blank.
The 1st parameter of istream::ignore()
is expressed in characters , not lines . So, when you call stream.ignore(1, '\n')
, you are ignoring only 1 character (ie, the F
of Fruit
), not 1 line .
To ignore a whole line, you need to pass in std::numeric_limits<streamsize>::max()
instead of 1
. That tells ignore()
to ignore all characters until the specified terminator ( '\n'
) is encountered.
Also, you are return
'ing a blank String
. You are ignoring the line
that you read with std::getline()
.
Try this instead:
#include <fstream>
#include <string>
#include <limits>
String getItem()
{
std::ifstream stream("data.txt");
//stream.ignore(1, '\n');
stream.ignore(std::numeric_limits<streamsize>::max(), '\n');
std::string line;
std::getline(stream, line);
return line.c_str();
// or: return String(line.c_str(), line.size());
}
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.