如何验证输入文件中的.txt数据? C ++

时间:2017-04-25 17:32:05

标签: c++ validation input io

目标是从.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

1 个答案:

答案 0 :(得分:0)

例如,您可以创建一个函数来告诉您一对值是否有效(menu != empty0 < 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;
}