我有两个文本文件。这两个文件的内容如下所示:
文件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;
}
答案 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