使用关键字

时间:2017-11-30 16:49:27

标签: c++ file-processing

我有两个文本文件。这两个文件的内容如下所示:

文件1内容: Apple 5 芒果10 橙色15

文件2内容: Apple 10 芒果15 橙20

我正在尝试创建一个带有关键字的程序(此处为水果名称)并随机选择其中一个文件并返回与该关键字对应的数值。以下是我的代码。但是,当我运行此程序时,它只显示第一个值而不是相应的值。我做错了什么?

    double Fruit::Price(string & sym)
    {
        ifstream inResultFile;
        string file_selected;
        int choice;
        string line;

        /*choice = (rand()%2);

        switch (choice)
        {
        case 0:
            file_selected = "file 1.txt";
            break;

        case 1:
            file_selected = "file 2.txt";
            break;
        }*/

        inResultFile.open("file 1.txt", ios::in);
        if (inResultFile.is_open())
        {
            double value=-1;
string name;

            while (inResultFile >> name >> value)
            {
cout<<name<<value;
if(name==sym)
                return value;
            }

        }
        else
            cout << "Sorry, the file could not be openend." << endl;
return -1;
    }

    int main()
    {
        Fruit Obj;
        string symbol;
        double f_Price;

        cout << "Enter a keyword to get the fruit price" << endl << endl;
        cin >> symbol;

        f_Price = Obj.Price(symbol);
        cout << "The selected price of the input symbol is " << f_Price << endl;
        return 0;
    }

2 个答案:

答案 0 :(得分:0)

1)您在以下行中销毁sym(请求的水果)的值:

    while (inResultFile >> sym >> value)
    {
        return value;
    }

注意:您必须按顺序读取文件,直到达到要求的值,之后您可以将其退回。

2)你永远不会检查从文件中获取的值是否是所请求的水果,只需返回第一次尝试!(也必须在上面的行中进行!)

答案 1 :(得分:0)

要获得正确的值,您必须对下面的水果进行比较: -

  string fruit = null;
  while(inResultFile >> fruit >> value)
  {
     if( fruit == sym)
         return value;
  }

在您的方法结束时使用以下行

  else
    cout << "Sorry, the file could not be openend." << endl;
  return 0;//no fruit found 

主要检查返回值是否为0表示您选择的水果在文件中不可用。

我刚刚使用你的下面的代码,这是我的工作文件。只需检查您的txt输入文件。必须是数据错误

class Fruit
{
   public:
     double Price(string & sym);
};

double Fruit::Price(string & sym)
{
    ifstream inResultFile;
    string file_selected;
    int choice;
    string line;

    /*choice = (rand()%2);

    switch (choice)
    {
    case 0:
        file_selected = "file 1.txt";
        break;

    case 1:
        file_selected = "file 2.txt";
        break;
    }*/

    inResultFile.open("file1.txt", ios::in);
    if (inResultFile.is_open())
    {
        double value=-1;
        string name;
        while (inResultFile >> name >> value)
        {
            cout<<name<<value<<endl;
             if(name==sym)
              return value;
        }

    }
    else
        cout << "Sorry, the file could not be openend." << endl;
        return -1;
}

int main()
{
    Fruit Obj;
    string symbol;
    double f_Price;

    cout << "Enter a keyword to get the fruit price" << endl << endl;
    cin >> symbol;

    f_Price = Obj.Price(symbol);
    cout << "The selected price of the input symbol is " << f_Price << endl;
    return 0;
}

我的输出

  

芒果
  艺术4
  Mango10
  输入符号的选定价格为10