我正在尝试读取文本文件中的条目并将其放入类中。文本文件的结构如下:
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
循环中该怎么做。此外,此代码看起来不正确。
我该如何编码?
答案 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