我正在尝试让我的程序遍历文件,每次都会收集大量信息。但是,在2个正确输入的行之后,无论文件的内容是什么,它总是变为默认值。最初它是一个eof while循环但我把它改为for循环来尝试修复它。这是我的代码:
ifstream furniture;
furniture.open("h://furniture.txt");
for(int i=0;i<=count;i++)
{
type=0;
furniture>>type>>name>>number>>material>>colour>>mattress;
switch (type)
{
case 1:
{
Item* item= new Bed(number, name, material, colour, mattress);
cout<<"working, new bed"<<endl;
v.push_back(item);
cout<<"working pushback"<<endl;
count++;
break;
}
case 2:
{
Item* item= new Sofa(number, name, material, colour);
cout<<"working, new sofa"<<endl;
v.push_back (item);
cout<<"working pushback"<<endl;
count++;
break;
}
case 3:
{
Item* item= new Table(number, name, material, colour);
cout<<"working, new table"<<endl;
v.push_back(item);
cout<<"working pushback"<<endl;
count++;
break;
}
default:
{
cout<<"Invalid input"<<endl;
type=0;
break;
}
}
}
我尝试了一系列不同的解决方案,但似乎没有解决问题。 任何帮助将不胜感激。
答案 0 :(得分:0)
ifstream
&#39; s operator>>
不会更改变量,因此type
保持为0,因此调用默认分支。您的文件似乎有格式错误,导致读取失败。
根据您的评论,您可能始终没有文件中的所有值,您可以执行以下操作:
最好的方法是使用getline()
读取整行,然后使用stringstream
从行中提取值,处理流程中的可选值:
string line;
getline(furniture, line);
stringstream ss(line);
ss>>type>>name>>number>>material>>colour>>mattress;
如果您为所有这些变量提供默认值,如果该行格式不正确或者不包含所有这些变量,它们将保留默认值。
这里使用getline()
的好处是,如果当前行存在问题,通过op>>
提取不会弄乱后续行。