目标是从.txt获取项目名称 - 字符串 - (.txt)和价格 - 双 - (.txt)。我需要检查此输入并确保它是有效的,如果没有,则返回1,然后退出程序。我能够检查以确保输入文件已打开。但我在如何检查其他数据方面漏掉了一个空白。 验证解释为一次两组(项目/价格)。
对于字符串值,我只需要确保该行不为空。对于double值,我需要确保它们是数字。
int getData(int& listSize, menuItemType*& menuList, int*& orderList)
{
//-----Declare inFile
ifstream inFile;
string price, size;
//-----Open inFile
inFile.open("Ch9_Ex5Data.txt");
//-----Check inFile
if (inFile.is_open())
{
//-----Get Amount of Items, Convert to int
getline(inFile, size);
listSize = stoi(size); <---This needs to be positive int
//-----Set Array Size
menuList = new menuItemType[listSize];
orderList = new int[listSize];
//-----Get Menu
for (int x = 0; x < listSize; x++)
{
//-----Get menuItem
getline(inFile, menuList[x].menuItem);//-make sure data recieved
//-----Get menuPrice convert to double
getline(inFile, price);
menuList[x].menuPrice = stod(price);//make sure double < 99
orderList[x] = 0;
} //teacher explained i should validate in
groups of two
return 0;
}
else
{
return 1;
}
}
//This is the .txt.
8
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
答案 0 :(得分:0)
例如,您可以创建一个函数来告诉您一对值是否有效(menu != empty
和0 < price < 99
时。每次读取每个对时都会调用此函数。< / p>
bool validation(const string& menu, const double& price){
if(menu.empty() || price < 0 || price > 99)
return 1 ;
else
return 0 ;
}
当该对正确时,该函数返回0,否则返回1(如您所示)。
现在只需要在每次创建新的值对时调用该函数。目前其中一个无效,它将退出该程序。
for (int x = 0; x < listSize ; x++)
{
//-----Get menuItem
getline(inFile, menuList[x].menuItem);//-make sure data recieved
//-----Get menuPrice convert to double
getline(inFile, price);//-make sure data recieved
menuList[x].menuPrice = atof(price.c_str());//make sure double < 99
//teacher explained i should validate in groups of two
if(validation(menuList[x].menuItem, menuList[x].menuPrice))
return 1 ;
orderList[x] = 0;
}