Вернуть число из текстового файла, используя ключевое слово

У меня есть два текстовых файла. Содержимое обоих файлов выглядит примерно так:

Содержание файла 1:
Apple 5
Манго 10
Оранжевый 15

Содержимое файла 2:
Яблоко 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;
}

0

Решение

1) Вы уничтожаете ценность sym(запрошенный фрукт) в следующих строках:

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

Замечания: Вы должны последовательно прочитать файл, пока не достигнете запрошенного значения, и после этого вы сможете его вернуть.

2) Вы никогда не проверяете значение, полученное из файла, является запрашиваемым фруктом или нет, просто возвращайте первую попытку! (Также это должно происходить в приведенных выше строках!)

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, что означает, что выбранный вами фрукт не доступен в файле.

Я только что использовал ваш код ниже, который является рабочим файлом для меня. Просто проверьте ваш текстовый входной файл. Должна быть ошибка данных

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;
}

И мой вывод

манго
Apple5
Mango10
Выбранная цена входного символа составляет 10

0

По вопросам рекламы [email protected]