需要将ifstream输入文件放入我可以循环和解密的格式

时间:2011-11-27 22:58:17

标签: c++ arrays fstream ifstream

我将有一个以下列方式组成的数据文件。 第一行将是文件中的行数[N] 下一行和每个连续行将具有三个值。 如果值为>0,则该订单项为三角形。 如果值为二和三的是<0,那么该订单项就是一个圆圈。 如果只有值3是<0,那么该订单项就是一个矩形。

我可以编写算法来操作这些项目,一旦我将它们分成圆圈, 矩形和三角形,但问题是我不知道该怎么做。

这是我到目前为止编写的代码。

#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

// MAIN
int main(void)
{
    int N=0;
    ifstream Hinfo;
    // ........................................................
    Hinfo.open("Holes");
    if (Hinfo.fail())
    { 
        cerr << "Error:  open input file error" << endl;
        exit(-1);
    } 
    else
        cout << "Success:  input files opened" << endl;
    // ........................................................
    Hinfo >> N;
    float A[N];
    float B[N];
    float C[N];
    float Rec[];
    float Cir[];
    float Tri[];
    // ........................................................
    for(int i=0; i<N; i++)
        Hinfo >> A[i] >> B[i] >> C[i];
    Hinfo.close();
}

我真的不知道接下来要做什么,或者到目前为止我做的是正确的路径 采取。

接下来我想到这就找到了矩形,三角形和圆形。

for (i=0; i<N; i++)
{
    if (C[i] < 0)
    {
        if (B[i] < 0)
            A[i] >> B[i] >> C[i] >> Circle[];
        else 
            A[i] >> B[i] >> C[i] >> Rectangle[];
    }
    else
        A[i] >> B[i] >> C[i] >> Triangle[];
}

我可以这样做吗?请帮助,我很难管理所有这些阵列。有没有更简单的方法将所有这些数据分成三角形,圆形和矩形数组?请记住,我是初学者,如此复杂或高级的语法会让我感到困惑 脆弱的n00b心灵

谢谢,卢克。

2 个答案:

答案 0 :(得分:0)

执行此操作的一种简单方法是使用三个数组,以及一个存储表示类型的整数的额外类型数组。(注意,您应该使用类型的枚举,但常量也可以使用)

这样,您不需要为三种形状中的每种形状分别使用单独的数组。

float A[N];
float B[N];
float C[N];
int type[N];

const int Triangle = 0;
const int Circle = 1;
const int Rectangle = 2;

然后你可以循环找到类型

for (i=0; i<N; i++)
{
    if (C[i] < 0)
    {
        if (B[i] < 0)
            type[i] = Circle;
        else 
            type[i] = Rectangle;
    }
    else
        type[i] = Triangle;
}

然后你可以再次遍历数组:

for (i=0; i<N; i++)
{
   if (type[i] == Triangle)
   {
        // I am a triangle;
   }

   else if ...   
}

当然你甚至不需要第二次循环,但如果你的老师想要它,这将是一种方法。

答案 1 :(得分:0)

我会做的是写一个结构来保存单个数据条目,可能是这样的:

const int TRIANGLE = 1;
const int CIRCLE   = 2;
const int RECTANGLE = 3;
struct Entry
{
    float points[3];
    int type;
};

这样,每次读取一行值时,都可以将它们放入新的Entry中并相应地设置类型。然后,您只需要一个数组或向量来保存条目。或者,您可以为每个条目类型创建一个数组/向量。

std::vector<Entry> Entries;
for(int i=0; i<N; i++)
{
    Entry e;
    Hinfo >> e.points[0] >> e.points[1] >> e.points[2];
    if( e.points[2] > 0 )
        e.type = TRIANGLE;
    else if( e.points[2]<0 && e.points[1]<0)
        e.type = CIRCLE;
    else if( e.points[2]<0 && e.points[1]>=0 && e.points[0]>=0)
        e.type = RECTANGLE;
    Entries.push_back(e);
}

这些方面应该做的事情。