我正在进行一项任务,要求我们只需从输入的文本文件中读取数据(文本文件不能硬编码到程序中),然后提取数据,并将其打印成表示频率的垂直直方图使用星星的每个数字。我相信我已经完成了程序,除了我无法获得我设计的调用函数来解析数据以实际解析它!有人可以告诉我在我的代码中我做错了什么吗?我非常感谢任何帮助。为了阐明数据集,假设总是21列和2行,垂直排列。
#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
void OpenFile(ifstream&);
void ParseFileLines(ifstream&, int*, int*);
void CloseFile(ifstream&);
void DrawGraphs(int*, int*);
int main()
{
ifstream inFile;
int speed[21];
int incline[21];
OpenFile(inFile);
ParseFileLines(inFile, incline, speed);
CloseFile(inFile);
DrawGraphs(speed, incline);
}
void DrawGraphs(int * speed, int * incline)
{
cout << "SPEED GRAPHIC:" << endl;
cout << " 1 2 3 4 5 6 7 8 9 10" << endl;
cout << "---+---+---+---+---+---+---+---+---+---+" << endl;
for (int i = 1; i < 21; i++)
{
cout << string(speed[i] + 3, '*');
}
cout << "INCLINE GRAPHIC:" << endl;
cout << " 1 2 3 4 5 6 7 8 9 10" << endl;
cout << "---+---+---+---+---+---+---+---+---+---+" << endl;
for (int i = 1; i < 21; i++)
{
cout << string(incline[i] + 3, '*') <<endl;
}
}
void CloseFile(ifstream & file)
{
file.clear();
file.close();
}
void ParseFileLines(ifstream & file, int * speed, int * incline)
{
{
char line[3];
int i = 0;
while (!file.eof())
{
file.getline(line, 3, ' ');
speed[i] = line[0];
incline[i] = line[2];
i++;
}
}
}
void OpenFile(ifstream& file)
{
string a;
cout << "Enter the filename" << endl;
getline(cin, a);
file.open((a.c_str()));
while (!file.good())
{
file.clear();
cout << "File failed to open" << endl;
cout << "Please re-enter the pathway" << endl;
cin >> a;
file.open(a.c_str());
}
}
答案 0 :(得分:0)
ifsteam.read (buffer, 20);
将20个字符读入缓冲区。这应该让你去。
答案 1 :(得分:0)
您没有指定要打开的文件。
您可以在构造函数ifstream inFile("myFile", mode);
More about ifstream here
或者你可以使用open()方法,该方法的工作原理相同:`inFile.open(“myFile”,mode); More information about open here
两个链接都解释了在你不确定的情况下放入模式的内容。