【发布时间】:2012-10-12 09:00:13
【问题描述】:
我正在尝试通过以下方式读取存储特征向量的特征向量文件:
(label) (bin):(value) (bin):(value) 等
喜欢:
-1 5:0.015748 6:0.0472441 7:0.0393701 8:0.00787402 12:0.0314961 13:0.0944882 14:0.110236 15:0.0472441 20:0.023622 21:0.102362 22:0.110236 28:0.015748 29:0.228346 30:0.125984 P >
如您所见,它保存时没有包含值为 0 的 bin。
我尝试使用以下代码阅读它们:
int bin;
int label;
float value;
string small_char; -> change to char small_char to fix the problem
if(readFile.is_open())
while(!readFile.eof()) {
getline(readFile, line);
istringstream stm(line);
stm >> label;
cout << label << endl;
while(stm) {
stm >> bin;
stm >> small_char;
stm >> value;
cout << bin << small_char << value << endl;
}
cout << "Press ENTER to continue...";
cin.ignore( numeric_limits<streamsize>::max(), '\n' );
}
}
但由于未知原因,标签被正确读取,第一个带有值的 bin 也是如此,但以下 bin 根本没有被读取。
上面示例行的输出是:
-1
5:0.015748
5:0.015748
Press ENTER to continue
后面的所有行都会发生同样的事情。
我正在使用 Visual Studio 10,如果这很重要的话。
【问题讨论】:
-
一件事(尽管与您的问题无关)是您不应该使用
while (readFile.eof())(或其他状态函数)。而是使用while (getline(readFile, line))。 -
顺便说一句,您能否编辑您的问题以包含
label、bin、small_char和value的声明。 -
@JoachimPileborg
getline在文件中,而不是在cin上。他只是在阅读cin以暂停。 -
没有看到变量声明,是不可能的。但顺便说一句,我会说在读取第二个垃圾箱时存在某种错误。您在没有检查您是否实际阅读过它们的情况下输出元素,因此最后一次成功的输入将被输出两次。你的嵌套循环应该是
while ( stm >> bin >> small_char >> value )。当然,你的外循环应该是while ( getline( readFile, line )。
标签: c++ visual-studio-2010 stringstream istringstream