从文件中读取。 C++
问题描述:
所以当我的程序启动时,它会尝试从文件中读取产品列表。但如果该文件不存在,则会显示错误并继续。有问题即时是当它显示错误,它不继续执行do while循环从文件中读取。 C++
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();
答
这是不相同的功能,但它通常是更好地实现像移动:
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。这是那种你正在阅读产品名称两次怪异,和我假设你可以在I/O调用后addProduct命令 - 如果没有你需要像一个while循环:
while (input >> data.productname >> data.category >> data.productprice)
{
addproduct(head, data);
if (!(input >> data.productname))
break;
}
什么是你做,而循环显示代码? – taocp 2013-04-18 02:32:16
等待...即使文件不存在,您也希望它尝试读取? – Beta 2013-04-18 02:34:31
我猜'input.eof()'从来没有真正的流不能打开。所以'while'循环会永远重复。 – Barmar 2013-04-18 02:36:35