试图从文件的多行中获取数据,并将它们放入结构中

  • 本文关键字:结构 获取 文件 数据 c++
  • 更新时间 :
  • 英文 :


函数只获取第一个菜单项和价格,而不获取其余项的数据和价格。我从中收集输入的文件的格式如下:

"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]读取。

  • 不要(通常(混合getlineoperator>>

其他建议:

  • 永远不要使用旧式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]

最新更新