我正在尝试将文件行(cityName
,hiTemp
,loTemp
)读入结构数组。我能够使用>>
来读取前几行,直到我找到一个有空格的城市。
然后我尝试使用getline()
来读取行,但是 while 循环停止工作。
我不知道为什么会这样。
int LoadData()
{
int count = 0;
string path;
cout << "Specify the input file path: ";
ifstream inFile;
cin >> path;
inFile.open(path.c_str());
if (!inFile.is_open())
{
cout << "Error - could not open file: " << path;
return (-1);
}
else
{
while (!inFile.eof())
{
cities[count].city = "";
getline(inFile, cities[count].city);
if (cities[count].city.length() == 0)
{
break;
}
char comma;
inFile >> (cities[count].high) >> comma >> cities[count].low;
cout << cities[count].city << " " << cities[count].high << " " << cities[count].low << endl;
count++;
}
inFile.close();
inFile.clear(std::ios_base::goodbit);
return count;
}
}
答案 0 :(得分:3)
使用getline
作为循环条件。您也可以使用getline
替换第二次阅读,并使用stringstream
进行解析。
#include <sstream>
// ...
while(getline(inFile, cities[count].city)) {
if (cities[count].city.empty()) break;
// read next line with high and low values
string str;
if (!getline(inFile, str)) break; // error in file format
stringstream ss(str);
char comma;
ss >> cities[count].high >> comma >> cities[count].low; // parse it
}
答案 1 :(得分:3)
while (!inFile.eof())
要获取文件中的每一行,您应该使用:
while(getline(inFile, cities[count].city)) {
// ...
这是有效的,建议使用.eof()
方法。
您也可以在if语句中使用它:
if (!getline(inFile, str))
break;
顺便说一下,你可以阅读这个网站:
Why is “while ( !feof (file) )” always wrong? - StackOverflow帖子
它深入了解了为什么使用.eof()
而不是作为首选方法在while循环中使用以检查是否已到达文件结尾。