函数只获取第一个菜单项和价格,而不获取其余项的数据和价格。我从中收集输入的文件的格式如下:
"menu item"
"price of menu item"
"menu item"
"price of menu item"
void getData(MenuItem menuList[], int &size)
{
inFile.open();
for(int i = 0; i < 8; i++)
{
if(!inFile.eof())
{
getline(inFile, menuList[i].description);
inFile >> menuList[i].price;
menuList[i].quantity = 0;
size++;
}
}
这里有几个错误:
-
输入文件不包含";价格;(或者在复制到StackOverflow时丢失了?(
-
您使用";getline";,它将读取整行。然后使用";运算符>gt"以读取价格(输入中缺少("运算符>gt"是否不读取整行。它试图提取恰好一个值。此外,它的值不能在引号中。我的猜测是(尚未核实(,在你尝试用
operator>>
读取价格失败后,eof是真的。 -
[不过有点令人困惑,因为我预计失败位是设置,而不是eof。但也许
inFile.fail()
是在operator>>
,然后下一次读取操作将为eof
,因为它尝试从fail
]读取。 -
不要(通常(混合
getline
和operator>>
其他建议:
- 永远不要使用旧式C矢量:
MenuItem menuItem[]
。2021年绝对没有理由再使用它们了。(除非你是一个真正的职业选手,并且真的非常需要他们…( - 请改用std::vector menuItem(无方括号(
- 使用menuItem.size((获取列表中的元素数量。像这样重写for循环
for (int i=0; i<menuItem.size(); ++i)
。这样就不会出现无效的内存访问错误 - 更好的是,将for循环重写为:
for (auto &item:menuItem)
,并使用item
而不是menuItems[i]