struct a{
int id;
short val[Num];//
};一个自定义文件,文件第一个数据为一个int,int的值为上面这个结构体a中的Num的值,这个值每个文件不一样,结构体a就是这个文件的每条数据的结构定义。我现在要写一个程序把这个文件的某些参数提取出来,我该怎么做比较好呢。
要先定义好一个准确的结构体才能读取文件中的数据啊。
我是这样做的
int  n;
file.read(&n,sizeof(int));
struct a
{
int id;
short val[n];
}这样编译都通不过,那该如何做才比较好呢。请知道的指点一下。

解决方案 »

  1.   

    。看不大懂你想干什么。file.read()不是应该读进char里再用atoi转成int类型么
      

  2.   


    不好意思,写错了,是这样的,file.read()我就示意了一下意思,
    就是说
    struct a{
    int id;
    short val[Num];//
    };
    这个结构体,必须读出文件第一个int后才能确定大小。
    然后
    a val;
    file.read(&val,sizeof(a));这样读。
    但是我们知道
    struct a{
    int id;
    short val[Num];//
    };
    这样定义是编译不能通过的。现在是想找个解决方法。
      

  3.   

    一种可行方案是柔性数组#include <iostream>
    #include <fstream>
    using namespace std;struct a
    {
        int id;
        short val[0];
    };void main()
    {
        ifstream fileIn("test.txt");
        int iLen, i;
        fileIn >> iLen;
        a* pA = (a*) new char[sizeof(a) + iLen*sizeof(short)];
        for(i = 0; i<iLen; i++)
            fileIn >> pA->val[i];    // 显示
        for(i = 0; i<iLen; i++)
            cout << pA->val[i] << endl;
    }
      

  4.   

    记得要释放 delete[] pA
      

  5.   


    在网上也搜到说要动态的分配结构体大小,但是一直没找到正确的方法。
    另外我定义的不是文件流ifstream ,而是一个CFile Fil;Fil.read(&val,sizeof(val));//我想这样循环的一条一条的读
      

  6.   

    用fstream吧,很方便的
    我那段代码能直接运行
    test.txt的内容可以是:
    3
    1
    2
    3
    File.read这个读取方法还要看你的文件时怎么存的呢。不好整
      

  7.   

    我知道怎么存的,存的就是
    文件开头是一个int比如值为Num,后面跟的就是一条一条的数据,数据结构如下:
    struct a
    {
    int id;
    short val[Num];
    };
      

  8.   

    文件是别人写的。所以改不了。只能老老实实的file.read()了。
      

  9.   

    数据是4字节int2字节short2字节short....
    排列的吗?    for(i = 0; i<iLen; i++)
            file.read(&pA->val[i], sizeof(short));试试这样
      

  10.   


    不是,相当于文件是这样排列的
    int //文件最前面的4个字节
    int //id 值
    short short short。。
    int //id 值
    short short short。。
    int //id 值
    short short short。。
    int //id 值
    short short short。。
    。。
    就是除了最前面的4个字节是一个整数(Num)外,后面的数据结构就是
    struct a
    {
    int id;
    short val[Num];
    };
    就是这样的,
      

  11.   

    最前面的那个字节就是Num?
    如果这样那么这个文件里的所有结构都是一样大小的吧
      

  12.   

    int n;
    file.read(&n,sizeof(int));
    struct a
    {
    int id;
    short val[n];
    }可以用变量定义数组大小的么?
      

  13.   

    就帮这么多了,剩下的自己搞吧,多看看书,多google    CFile file(L"test.txt", CFile::modeRead);
        int iLen, i;
        file.Read(&iLen, sizeof(int));
        a* pA = (a*)new char[sizeof(int)+iLen*sizeof(short)];
        for(i = 0; i<iLen; i++)
            file.Read(&pA->val[i], sizeof(short));