我正在为我的班级编写一个程序,它接受一个文本文件并分配文本中的每一行。我遇到的问题是,当我使用getline()时,它完全跳过输入。从我读过的所有内容我觉得我做得对,但显然我错过了一些东西。这只是代码的一小部分...如果你需要整个事情我可以发布它。谢谢你提前给大家的帮助。
garage populategarage()
{
garage tg; //temporary garage
string instruction_prompt;
initialize_garage(tg);
ifstream inputFile;
inputFile.open("garage-input-file.txt");
for (int i = 0; i < NUM_OF_VEHICLES; i++)
{
inputFile >> tg.vehicles[i].category;
if (tg.vehicles[i].category == "\0")
i = NUM_OF_VEHICLES;
else
{
inputFile >> tg.vehicles[i].make;
inputFile >> tg.vehicles[i].model;
inputFile >> tg.vehicles[i].color;
inputFile >> tg.vehicles[i].year;
inputFile >> tg.vehicles[i].trans;
inputFile >> tg.vehicles[i].cylinder;
getline(inputFile, tg.vehicles[i].drive); //This is my problem
}
}
答案 0 :(得分:0)
您没有显示任何示例输入或结果是什么,但从您的描述中看起来似乎每个值都出现在它自己的行上。那是对的吗?在这种情况下,getline
调用可能会获取上一个换行符(从您阅读cylinder
时开始),并返回一个空字符串。
如果您的值显示在单独的行中,则应该为每个值使用getline
。您可以将任何类型的此行为包装到模板函数中 - 这很简单:
template <class T>
istream & readValue( istream & s, T & value )
{
string line;
if( getline( s, line ) )
{
istringstream iss( line );
iss >> value;
}
return s;
}
如果您的文件包含每个条目的单个行,那么通常最好对整行使用getline
,然后从istringstream
读取单个值。
for (int i = 0; i < NUM_OF_VEHICLES; i++)
{
string line;
if( !getline( inputFile, line ) ) break;
istringstream iss( line );
iss >> tg.vehicles[i].make;
iss >> tg.vehicles[i].model;
// etc...
}