我正在尝试从文本文件读取数据并将其显示在屏幕上。稍后,我将尝试按符号和增益百分比对行进行重新排序,但首先,我想使代码简单地读取并显示其中包含的内容。
我要回答的实际问题是:
(股票市场)编写一个程序来帮助本地股票交易公司自动化其系统。
该公司仅投资于股票市场。在每个交易日结束时,该公司都希望生成并发布其股票的上市信息,以便投资者可以看到他们当天所持股票的表现。我们假设公司投资了10种不同的股票。
所需的输出是产生两个清单,一个清单按股票代码排序,而另一个清单按百分比从最高到最低的百分比排序。
以以下格式在文件中提供输入数据:symbol openingPrice closingPrice todayHigh todayLow prevClose volume
。例如,样本数据为:
分两步开发此编程练习。
在第一步(a部分)中,设计和实现库存对象。
在第二个步骤(b部分)中,设计并实现一个对象来维护库存清单。
a。 (库存对象)设计和实施库存对象。调用捕获库存对象stockType
各种特征的类。
股票的主要成分是stock symbol
,stock price
和number of shares
。
此外,我们需要输出opening price
,closing price
,high price
,low price
,previous price
和percent gain/loss for the day
。
这些也是股票的所有特征。因此,库存对象应存储所有这些信息。
对每个库存对象执行以下操作:
<<
,以便于输出。 >>
,以便于输入。例如,假设infile
是ifstream
对象,并且使用对象infile
打开了输入文件。进一步假设myStock
是stock
对象。然后,语句:infile >> myStock;
从输入文件中读取数据并将其存储在对象myStock中。 b。现在,您已经设计并实现了类stockType
来在程序中实现stock
对象,现在该创建stock
对象列表了。让我们调用该类以实现stock
对象stockListType
的列表。
stockListType
必须派生自您在上一个练习中设计和实现的类listType
。但是,类stockListType
是一个非常特殊的类,旨在创建库存对象列表。因此,类stockListType
不再是模板。 listType
的操作,以在库存清单上实施必要的操作。 stockListType
派生出类listType
。 class stockListType: public listType { member list };
list
中,用于保存list
元素的成员变量,listSize
的长度和最大值listType
被声明为受保护的。因此,可以在类stockListType
中直接访问这些成员。 sortIndicesGainLoss
。
sortIndicesGainLoss
来打印列表。 sortIndicesGainLoss
的元素将告诉您接下来要打印的库存清单的哪个部分。 c。编写一个程序,使用这两个类来自动化公司对股票数据的分析。
这可能是我的最终目标,但我还没有尝试做它描述的一些事情。
我认为导致问题的部分在此处:
void printScreen(ifstream &infile)
{
stockType in;
stockType out;
int count = 0;
string line;
cout << "********* First Investor's Heaven *********" << endl;
cout << "********* Financial Report *********" << endl;
cout << "Stock Today Previous Percent" << endl;
cout << "Symbol Open Close High Low Close Gain Volume" << endl;
cout << "----- ----- ----- ----- ------ ------- -----" << endl;
while (getline(infile, line))
{
count++;
}
for (int i = 0; i < count; i++)
{
infile >> in;
cout << out;
}
cout << "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*";
}
我的主要功能是:
int main()
{
char repeat = ' ';
string userSelection;
int selection;
ifstream infile;
cout << "Please enter a filename of type .txt: ";
cin >> userSelection;
infile.open(userSelection);
if (!infile)
{
cout << userSelection << " is not found. The program will now exect. Please ensure the filename is correct and the file is in the porper directory." << endl;
exit(0);
}
do
{
selection = Menu();
switch (selection)
{
case 1:
printScreen(infile);
break;
case 2:
exit(0);
break;
default:
cout << "An error has occured, the program will now exit." << endl;
exit(0);
}
cout << "If you would like to enter another file enter y. Otherwise the system will conclude: ";
cin >> repeat;
} while (repeat = 'y');
infile.close();
return 0;
}
而我正试图利用这一点:
ostream& operator << (ostream& out, stockType& temp)
{
char tab = '\t';
out.imbue(locale(""));
out << setprecision(2) << fixed;
out << temp.getStockSymbol() << tab << setw(6) << temp.getOpeningPrice() << tab << setw(6) << temp.getClosingPrice() << tab << setw(7) << temp.getHighPrice() << tab << setw(8) << temp.getLowPrice() << setw(9) << temp.getPreviousPrice() << setw(10) << temp.getPercentGainLoss() << "%" << tab << setw(11) << temp.getStockShares() << endl;
return out;
}
istream& operator>>(istream& in, stockType& obj)
{
string temp;
double val;
int x;
in >> temp;
obj.setStockSymbol(temp);
in >> val;
obj.setOpeningPrice(val);
in >> val;
obj.setClosingPrice(val);
in >> val;
obj.setHighPrice(val);
in >> val;
obj.setLowPrice(val);
in >> val;
obj.setPreviousPrice(val);
in >> x;
obj.setStockShares(x);
return in;
}
我的输出应该按照与读取输出相同的方式进行排序,但是我没有得到该符号的输出,并且得到了一个无尽的循环,似乎并没有读取所有内容。
答案 0 :(得分:0)
为了显示文件的内容,您只需要使用一个循环即可遍历文件的内容,直到到达文件末尾。 试试:
char ch = infile.get();
while(ch != EOF) {
cout << ch;
ch = infile.get();
}
infile.clear();
或尝试:
while (getline(infile, line)) {
cout << line;
}