这是我班级的定义:
class BPP
{
unsigned n; /* nº de instancias */
vector<string> nombre_instancia; /* nombre de la instancia*/
vector<unsigned> n_objetos; /* nº de objetos a almacenar en cada instancia */
vector<unsigned> C; /* capacidad máxima de cada contenedor */
vector<unsigned> mejor; /* mejor nº mínimo de contenedores usados (m*) */
vector< vector<unsigned> > tam_objeto;
这是我的完整构造函数:
BPP :: BPP(char fich1[])
{
ifstream file1; string str; unsigned a, b, c, d;
file1.open(fich1);
if (file1.is_open()){
file1 >> (unsigned &) n;
for (unsigned k = 0 ; k < n ; ++k){
getline(file1, str); nombre_instancia.push_back(str);
file1 >> a; n_objetos.push_back(a);
file1 >> b; C.push_back(b);
file1 >> c; mejor.push_back(c);
for (unsigned h = 0 ; h < a ; ++h){
file1 >> d; tam_objeto[k].push_back(d);
}
}
}
file1.close();
}
fich1中的第5行是:
10
P_0 /*Notice the space in the beginning of the line, and in the end*/
150 120 52
30
34
输出的所有值都是0(如果是无符号)或“”(如果是字符串)
答案 0 :(得分:1)
问题是10
之后的新行字符不消耗:
file1 >> (unsigned &) n; // Why the cast here?
这意味着getline(file1, str)
调用仅读取换行符,即空行。下一个输入操作是:
file1 >> a;
失败,因为P_0
不是有效unsigned int
。此失败会阻止对file1
流进行任何进一步读取(设置其failbit)。
要解决此问题,您只需简单地调用getline()
两次,忽略第一次调用的结果。
检查所有读取的结果以检测故障。这样做会提醒您读取失败。