У меня есть два текстовых файла. Содержимое обоих файлов выглядит примерно так:
Содержание файла 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;
}
1) Вы уничтожаете ценность sym
(запрошенный фрукт) в следующих строках:
while (inResultFile >> sym >> value)
{
return value;
}
Замечания: Вы должны последовательно прочитать файл, пока не достигнете запрошенного значения, и после этого вы сможете его вернуть.
2) Вы никогда не проверяете значение, полученное из файла, является запрашиваемым фруктом или нет, просто возвращайте первую попытку! (Также это должно происходить в приведенных выше строках!)
чтобы получить правильное значение, вы должны сделать сравнение фруктов, как показано ниже:
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