因此,当我的程序启动时,它会尝试从文件中读取产品列表。但如果该文件不存在,则会显示错误并继续。我遇到的问题是当它显示错误时,它不会继续执行do while循环
ifstream input;
input.open("data.txt");
if (input.fail())
{
cout << "\n Data file not found \n";
}
ListItemType data;
input >> data.productname;
while(( !input.eof()))
{
input >> data.category;
input >> data.productprice;
addproduct(head, data);
input >> data.productname;
}
input.close();
答案 0 :(得分:1)
这不是相同的功能,但通常更好地转向:
if (std::ifstream input("data.txt"))
{
ListItemType data;
while (input >> data.productname >> data.category >> data.productprice >> data.productname)
addproduct(head, data);
if (!input.eof())
std::cerr << "Error parsing input file.\n";
}
else
cout << "\n Data file not found \n";
如果你按照上面的方式构造你的if / else子句,无论发生什么,它都会继续你想要的下面的代码。
请注意,上面的代码会在每次输入操作后检查问题。即使读取data.category失败,您的代码也会尝试读取data.productprice。你有两次读取productname有点奇怪,我假设你可以在I / O之后调用addproduct - 如果不是你需要一个while循环,如:
while (input >> data.productname >> data.category >> data.productprice)
{
addproduct(head, data);
if (!(input >> data.productname))
break;
}