所以我从我的一个程序中获得了这个功能,之前它给了我所有这些(-9.25596e + 061)并且只有第一行。但后来我把{','在我的getline中,让它打印整个文件,但仍然得到数字(这是一个内存转储吗?)
void getMenuFromFile(ifstream& inFile, menuItemType menu[], int menuSize) {
for (int i = 0; i < menuSize; i++) {
getline(inFile, menu[i].menuType, ',');
inFile >> menu[i].menuPrice;
inFile.ignore();
}
}
输入:
Plain Egg $1.45
Bacon and Egg $2.45
Muffin $0.99
French Toast $1.99
Fruit Basket $2.49
Cereal $0.69
Coffee $0.50
Tea $0.75
输出:
Plain Egg $1.45
Bacon and Egg $2.45
Muffin $0.99
French Toast $1.99
Fruit Basket $2.49
Cereal $0.69
Coffee $0.50
Tea $0.75
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
Press any key to continue . . .
答案 0 :(得分:1)
您的代码存在许多问题:
您告诉std::getline
停在','
,但您的输入不包含任何内容。因此,它在第一次调用时会占用整个文件。最后,您打算使用'$'
代替?
之后,提取价格和所有其他行的尝试失败。您会注意到是否要检查流的状态,如
if (!inFile) { cerr << "damn it!\n"; }
即使问题得到解决,您仍然无法在int
中存储1.45和所有其他价格。也许你想要float
代替?
你的输出是这样的:
首先,您会看到进入menu[0].menuType
的文件的全部内容。对于所有剩余的条目,您将得到一个空的(默认构造的)字符串和碰巧在内存中的随机垃圾值(因为int
s未进行值初始化)。
更新:在审核完输出后,我怀疑menuItemType::menuPrice
是int
,正如您在评论中所说的那样。它不是float
或double
吗?上述其他问题仍然存在。
答案 1 :(得分:0)
void showMenu(menuItemType menu[], int menuSize)
{
for (int i = 0; i < menuSize; i++)
{
cout << menu[i].menuType << endl;
//cout << menu[i].menuPrice << endl;
}
}
谢谢@AndyG,我可能发布了错误的功能,但是你让我指出问题是来自哪里。为了摆脱额外的数字,我评论了第二个cout,这是不需要的。
输出
Plain Egg $1.45
Bacon and Egg $2.45
Muffin $0.99
French Toast $1.99
Fruit Basket $2.49
Cereal $0.69
Coffee $0.50
Tea $0.75