C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
C++ Batting Average program trouble using Input/Output files to print names, averages, highest/lowest averages
我有这个击球平均程序。我的问题是我无法使用输入/输出文件输出此程序,以便它显示最高/最低平均值以及与之相关的名称。我在main中的代码不正确,因为它只输出"最高击球平均值是:0"和"平均击球率最高的球员:"没有一个平均值是0,所以它不应该输出它,并且在最高击球平均值旁边应该有一个名字。最低的也是如此。这是我到目前为止所拥有的:
#include "Player.h"
#include "Stack.h"
#include <fstream>
using namespace std;
int main()
{
Player x;
string name;
double avg;
ifstream infile("avgs.txt");
while (infile >> name >> avg)
{
x.insertPlayer(name, avg);
}
infile.close();
x.printHigh();
x.printLow();
if(!infile)
{
cout << "Unable to open the file for writing " << endl;
exit(0);
}
ofstream outfile("avgs.txt");
if (!outfile)
{
cout << "Error opening file " << endl;
exit(0);
}
outfile << endl;
}
以下是 Player 类和 Stack 类的文件,以防需要:
////Player.h
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Stack.h"
using std::string;
class Player
{
public:
double lowest;
double highest;
Stack<string> low;
Stack <string> high;
void insertPlayer(string name, double batAvg);
void printHigh();
void printLow();
};
这是 Player 类的.cpp文件:
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Player.h"
using namespace std;
using std::string;
void Player::insertPlayer(string name, double batAvg)
{
cout << "Player " << name << " has an average of: " << batAvg << endl;
if (low.empty() && high.empty())
{
low.push(name);
high.push(name);
highest = lowest = batAvg;
}
else
{
if (batAvg>highest)
{
while (!high.empty())
high.pop();
highest = batAvg;
high.push(name);
}
else if (batAvg == highest)
high.push(name);
else if (batAvg<lowest)
{
while (!low.empty())
low.pop();
lowest = batAvg;
low.push(name);
}
else if (batAvg == lowest)
low.push(name);
}
}
void Player::printHigh()
{
cout << "Highest batting average is: " << highest << endl;
cout << "Players with the highest batting average: " << endl;
}
void Player::printLow()
{
cout << "Lowest batting average is: " << lowest << endl;
cout << "Players with the lowest batting average: " << endl;
}
如果需要,还有我的 Stack 类:
#ifndef STACK
#define STACK
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
template <class T>
class Stack : public exception
{
private:
vector<T>myStacks;
public:
void push(T const& uStack);
void pop();
T peek() const;
bool empty() const
{
return myStacks.empty();
}
};
template <class T>
void Stack<T>::push(T const& uStack)
{
myStacks.push_back(uStack);
}
template <class T>
void Stack<T>::pop()
{
if (myStacks.empty())
{
throw std::out_of_range("Stack <>::pop(): This is an empty stack ");
}
myStacks.pop_back();
}
template <class T>
T Stack<T>::peek() const
{
if (myStacks.empty())
{
throw std::out_of_range("Stack<>::peek(): This is an empty stack ");
}
return myStacks.back();
}
#endif
我尝试输出的焦点代码是 Player.cpp,但需要 Stack.h 和 Player.h 才能使其运行。在main((中,我需要输出名称,平均值和具有最高/最低平均值的人。任何帮助不胜感激!
文本文件由球员及其平均值组成,例如: 奥兰多.775 查尔斯.606 法学博士 .775 吉娜.400 山姆.702 丰富 .686
等等。
您要做的第一件事是删除 main 中x.printLow();
后的所有内容,然后验证预期的输入是否存在于avgs.txt
中。
您的代码将使用单个换行符覆盖输入文件,因此如果您尝试过一次,您可能不再获得预期的输入。请注意,您永远不会看到cout << "Player " << name << " has an average of: " << batAvg << endl;
的输出。这表示未调用insertPlayer
。
我很确定这是查找输入文件的问题,因为它适用于不同的输入源。包含文本的文件是否与.exe位于同一文件夹中?它是否位于不同的文件夹中,例如源文件所在的位置?
一个简单的测试是将文件的内容复制到cout
,看看程序找到了什么
int main() {
std::ifstream infile("avgs.txt");
for (std::string line; std::getline(infile, line;) {
std::cout << line << std::endl;
}
}
- 计算数组c++的平均值
- 最高有效数字侧的第N位
- 计算平均值,不包括上次得分
- 彩色图像的卤化物处理平均值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 按平均值替换数组中的元素
- 如何返回多个矢量对象的平均值?C++
- 如何使用 do while 循环确定最高值和最低值
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 制作具有平均值的随机数生成器
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 如何使用对象制作分数列表并获得平均值
- 计算过去 60 秒的最低和最高温度
- 浮点格式数组的平均值
- 在二叉搜索树C++中计算平均值
- 如何使用指针找到最高值?
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- 使用函数输出最高平均值
- c++的最高和最低平均值