将FILE *读入课堂

时间:2014-07-02 00:30:34

标签: c file class

我正在尝试读取文本文件中的条目并将其放入类中。文本文件的结构如下:

ABCD
3.00
2
6.00
-

进入课堂:

typedef struct item
{
    char        *name;
    double      uprc;
    double      cost;
    int         qty;
} item;

“ABCD”是名称,3.00是uprc,2是qty,6.00是cost

我该如何实现?到目前为止,我有:

void read()
{
    item i;
    FILE *f = fopen(PATH, "r");
    char *buf;
    int c, nl_ct = 0;
    while((c = getch(f)) != EOF){
        putchar(c);
        if(c == '\n'){
            nl_ct++;
            switch(nl_ct){
            case 1:
                {
                    char *buf;
                    while(fgets(buf, sizeof(buf), f))

                }
                break;
            }
        }
    }
}

但是,我不知道在最里面的while循环中该怎么做。此外,此代码看起来不正确。

我该如何编码?

2 个答案:

答案 0 :(得分:5)

如果您只使用C ++提供的工具,这会变得更加简单。

假设:

class item
{
public:
    std::string name;
    double uprc;
    double cost;
    int qty;
};

您可以这样做(包括<string><fstream><iostream>后):

std::ifstream input(PATH);
item i;

std::getline(input, i.name); 
input >> i.uprc;
input >> i.qty;
input >> i.cost;

使用std::getline的原因是读取整行,如果只执行input >> i.name;那么它只会读到第一个空格字符,因此它不适用于名称有空格。

或者,您可以提供自己的operator>>,这样就可以input >> i;。另请注意,此处没有进行错误检查,因此您需要自己添加。

答案 1 :(得分:2)

1)你更大的问题是你似乎没有为“* buff”分配任何空间(假设你想要一次读取多于1个字符)或“* name”。 你必须这样做。 malloc()或固定大小的数组。

2)我同意 - 这绝对看起来像C.为什么不只是使用“struct”(而不是“class”包含所有“public:”)并完成它?

3)但是,如果您使用C ++ - 我绝对会敦促您考虑ifstream。

4)更重要的是,您还应该考虑使用C ++“string”而不是字符数组。

... IMHO