如何正确解析和格式化这些数据?

时间:2014-12-07 23:31:21

标签: c++

我正在进行一项任务,要求我们只需从输入的文本文件中读取数据(文本文件不能硬编码到程序中),然后提取数据,并将其打印成表示频率的垂直直方图使用星星的每个数字。我相信我已经完成了程序,除了我无法获得我设计的调用函数来解析数据以实际解析它!有人可以告诉我在我的代码中我做错了什么吗?我非常感谢任何帮助。为了阐明数据集,假设总是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());
    }
}

2 个答案:

答案 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

两个链接都解释了在你不确定的情况下放入模式的内容。