Reputation: 242
I have file like this:
59 137 New York
137 362 Syracuse
216 131 New Jersey
...
..
.
and I would like to read it to a structure: X - Y - name of a city
char city[100];
int x , y;
f.open("map.txt");
f >> x >> y >> city;
while (!f.fail()) {
f >> x >> y >> city;
}
f.close();
Problem is, that city reads only until next space, so from New York it reads only New. How should I read whole rest of a line, in some easy and smart way ?
Upvotes: 2
Views: 12449
Reputation: 88017
This code reads spaces and handles end of file correctly. None of the other answers do this I think
while ((f >> x >> y).getline(city, 100))
{
}
See this for more information on how to correctly test for end of file.
Of course you should be doing things the easy way using std::string
as others have said.
Upvotes: 1
Reputation: 71
Use getline(f, city) for city. So, you have f >> x >> y; getline(f, city);
Upvotes: 1
Reputation: 63946
The format of your file seems to imply that the name of the city ends at the end of a line, not a space.
You can read that form using getline
char city[100];
int x , y;
f.open("map.txt");
while ( f ) {
f >> x >> y;
f.getline(city, 100);
}
f.close();
Upvotes: 4
Reputation: 3922
You can do something like this:
f.open("map.txt");
string city;
int x , y;
f >> x >> y;
getline(f,city);
while (!f.fail()) {
f >> x >> y;
getline(f,city);
}
f.close();
Upvotes: 3